diff --git a/clients/ts/FunctionalTests/TestHub.cs b/clients/ts/FunctionalTests/TestHub.cs index 6c4275ee9100797abb67764bdd3e4e060b4001b8..53230b52702f073d07840e76aed776e7377949f2 100644 --- a/clients/ts/FunctionalTests/TestHub.cs +++ b/clients/ts/FunctionalTests/TestHub.cs @@ -83,5 +83,10 @@ namespace FunctionalTests String = "hello world", }; } + + public string GetContentTypeHeader() + { + return Context.GetHttpContext().Request.Headers["Content-Type"]; + } } } diff --git a/clients/ts/FunctionalTests/ts/HubConnectionTests.ts b/clients/ts/FunctionalTests/ts/HubConnectionTests.ts index b1ad1044816f959100c105f228cde5150e471ecf..6a4a84e85303382544cf2058b63fefe22a2a3601 100644 --- a/clients/ts/FunctionalTests/ts/HubConnectionTests.ts +++ b/clients/ts/FunctionalTests/ts/HubConnectionTests.ts @@ -686,6 +686,24 @@ describe("hubConnection", () => { } }); + it("populates the Content-Type header when sending XMLHttpRequest", async (done) => { + const hubConnection = getConnectionBuilder(HttpTransportType.LongPolling, TESTHUB_NOWEBSOCKETS_ENDPOINT_URL) + .withHubProtocol(new JsonHubProtocol()) + .build(); + + try { + await hubConnection.start(); + + // Check what transport was used by asking the server to tell us. + expect(await hubConnection.invoke("GetActiveTransportName")).toEqual("LongPolling"); + // Check to see that the Content-Type header is set the expected value + expect(await hubConnection.invoke("GetContentTypeHeader")).toEqual("text/plain;charset=UTF-8"); + done(); + } catch (e) { + fail(e); + } + }); + function getJwtToken(url: string): Promise<string> { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); diff --git a/clients/ts/signalr/src/HttpClient.ts b/clients/ts/signalr/src/HttpClient.ts index 66837a01a0200f2b392c5b81e74ee776e22e406d..7fb94fac0a970fe1c1a53df1aafdf16312e437c9 100644 --- a/clients/ts/signalr/src/HttpClient.ts +++ b/clients/ts/signalr/src/HttpClient.ts @@ -163,6 +163,8 @@ export class DefaultHttpClient extends HttpClient { xhr.open(request.method, request.url, true); xhr.withCredentials = true; xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + // Explicitly setting the Content-Type header for React Native on Android platform. + xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8"); if (request.headers) { Object.keys(request.headers)