From 67578a8cba5669edf680f6216ae08a3925adbae4 Mon Sep 17 00:00:00 2001 From: "Julio C. Rocha" Date: Tue, 14 Oct 2025 19:29:54 -0700 Subject: [PATCH 1/5] Add web test --- Directory.Build.targets | 1 + .../Microsoft/Office/OfficeJsTests.cs | 26 +++++++++++++++++++ vnext/TestWebSite/Program.cs | 4 +++ 3 files changed, 31 insertions(+) diff --git a/Directory.Build.targets b/Directory.Build.targets index 3d59a22553c..5dda70c734e 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -105,6 +105,7 @@ BaseOutDir; ReactNativeDir; ReactNativeWindowsDir; + RnwNewArch; FollyDir; YogaDir; WinVer; diff --git a/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs b/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs index 917fc139f9c..e07f1ddd36f 100644 --- a/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs +++ b/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs @@ -13,5 +13,31 @@ public static async Task Issue4144(HttpContext context) var bytes = Encoding.UTF8.GetBytes("Check headers: [Access-Control-Allow-Origin]"); await response.Body.WriteAsync(bytes); } + + public static async Task Issue5869(HttpContext context) + { + var response = context.Response; + response.ContentType = "text/plain"; + response.StatusCode = 200; + + var request = context.Request; + + var resBody = ""; + if (request.ContentType == "multipart/form-data") + { + resBody = $"Binary form data with {request.Form.Count} entries"; + } + else if (request.ContentType == "application/x-www-form-urlencoded") + { + resBody = $"Text form data with {request.Form.Count} entries"; + } + else + { + resBody = $"Unknown Content-Type [{request.ContentType}]"; + } + + var bytes = Encoding.UTF8.GetBytes(resBody); + await response.Body.WriteAsync(bytes); + } } } diff --git a/vnext/TestWebSite/Program.cs b/vnext/TestWebSite/Program.cs index ef80f6b735f..0fe4dd3aca7 100644 --- a/vnext/TestWebSite/Program.cs +++ b/vnext/TestWebSite/Program.cs @@ -85,6 +85,10 @@ async Task DefaultRequestDelegate(HttpContext context) Microsoft.Office.Test.OfficeJsTests.Issue4144) .RequireCors(originPolicyName); +app.MapPost( + "/officedev/office-js/issues/5869", + Microsoft.Office.Test.OfficeJsTests.Issue5869); + #endregion Request Mappings await app.RunAsync(); From 6c9980da1448fa832a5c0b50cbc693884360f7f2 Mon Sep 17 00:00:00 2001 From: "Julio C. Rocha" Date: Tue, 14 Oct 2025 19:30:16 -0700 Subject: [PATCH 2/5] Update filters --- vnext/Shared/Shared.vcxitems.filters | 1 + 1 file changed, 1 insertion(+) diff --git a/vnext/Shared/Shared.vcxitems.filters b/vnext/Shared/Shared.vcxitems.filters index 2ee2d481859..ea4dfb8d5fa 100644 --- a/vnext/Shared/Shared.vcxitems.filters +++ b/vnext/Shared/Shared.vcxitems.filters @@ -327,6 +327,7 @@ + From cce27e55a4f4e8638cc27911bf69fce5ab9bf1d5 Mon Sep 17 00:00:00 2001 From: "Julio C. Rocha" Date: Tue, 14 Oct 2025 19:31:33 -0700 Subject: [PATCH 3/5] UNDO: comment-out ImageLoader, NativeAnimatedModule --- .../ReactHost/ReactInstanceWin.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp b/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp index 35a4874ae9b..5071ca483cc 100644 --- a/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +++ b/vnext/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp @@ -392,15 +392,15 @@ void ReactInstanceWin::LoadModules( winrt::Microsoft::ReactNative::MakeModuleProvider<::Microsoft::ReactNative::NativeAnimatedModule>()); #else - if (Microsoft::ReactNative::IsFabricEnabled(m_reactContext->Properties())) { - registerTurboModule( - L"ImageLoader", - winrt::Microsoft::ReactNative::MakeTurboModuleProvider<::Microsoft::ReactNative::ImageLoader>()); - - registerTurboModule( - L"NativeAnimatedModule", - winrt::Microsoft::ReactNative::MakeModuleProvider<::Microsoft::ReactNative::NativeAnimatedModule>()); - } + //if (Microsoft::ReactNative::IsFabricEnabled(m_reactContext->Properties())) { + // registerTurboModule( + // L"ImageLoader", + // winrt::Microsoft::ReactNative::MakeTurboModuleProvider<::Microsoft::ReactNative::ImageLoader>()); + + // registerTurboModule( + // L"NativeAnimatedModule", + // winrt::Microsoft::ReactNative::MakeModuleProvider<::Microsoft::ReactNative::NativeAnimatedModule>()); + //} #endif if (!m_options.UseWebDebugger()) { From c52ea47c92bfa49565c01a9c40e297e95f12461f Mon Sep 17 00:00:00 2001 From: "Julio C. Rocha" Date: Fri, 19 Dec 2025 01:33:53 -0800 Subject: [PATCH 4/5] Make response content clearer --- vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs b/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs index e07f1ddd36f..6f26f9cafc3 100644 --- a/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs +++ b/vnext/TestWebSite/Microsoft/Office/OfficeJsTests.cs @@ -1,4 +1,5 @@ using System.Text; +using System.Text.RegularExpressions; namespace Microsoft.Office.Test { @@ -22,14 +23,14 @@ public static async Task Issue5869(HttpContext context) var request = context.Request; - var resBody = ""; - if (request.ContentType == "multipart/form-data") + string? resBody; + if (Regex.IsMatch(request.ContentType!, @"multipart/form-data(;\s+.*)?")) { - resBody = $"Binary form data with {request.Form.Count} entries"; + resBody = $"Multipart form data with {request.Form.Count} entries"; } else if (request.ContentType == "application/x-www-form-urlencoded") { - resBody = $"Text form data with {request.Form.Count} entries"; + resBody = $"URL-encoded form data with {request.Form.Count} entries"; } else { From 075935de79d5614306b12d2b1d51b4328ae57611 Mon Sep 17 00:00:00 2001 From: "Julio C. Rocha" Date: Thu, 15 Jan 2026 23:39:30 -0800 Subject: [PATCH 5/5] Change files --- ...ative-windows-14d8afe5-5c05-4205-aeec-11134992e9c2.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 change/react-native-windows-14d8afe5-5c05-4205-aeec-11134992e9c2.json diff --git a/change/react-native-windows-14d8afe5-5c05-4205-aeec-11134992e9c2.json b/change/react-native-windows-14d8afe5-5c05-4205-aeec-11134992e9c2.json new file mode 100644 index 00000000000..c647fcb05d5 --- /dev/null +++ b/change/react-native-windows-14d8afe5-5c05-4205-aeec-11134992e9c2.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Add multipart/form-data test endpoint", + "packageName": "react-native-windows", + "email": "julio.rocha@microsoft.com", + "dependentChangeType": "patch" +}