UnityTls_get_NativeInterface fails in WebGL

I’ve been trying to use a couple of libraries like MSAL.NET and Microsoft Graph, which all make http calls with HttpClient using TLS, in WebGL using Unity 6.
They all work fantastic in the Editor, but in WebGL, even if the call stack is a little bit different for each one of the failures, all fail at the same point; after UnityTls_get_NativeInterface is called.
As far as I was able to see in the source code of the Mono implementation of Unity, the getter for NativeInterface in UnityTLS first calls GetUnityTlsInterface, which returns a pointer, and then calls Marshal.PtrToStructure<unity_interface_struct> sending the pointer it got from GetUnityTlsInterface, and at this point the application throws a Runtime Error like this:

RuntimeError: null function or function signature mismatch
    at Marshal_PtrToStructure_m235E141E21BFB69A01B07DDDF1702BA7D5723AC3 (Build.wasm.br:0x2e05957)
    at Marshal_PtrToStructure_TisRuntimeObject_mAFC160D8333711F9FE85A7C91B1BD048C32A8837_gshared (Build.wasm.br:0x2b70fd2)
    at UnityTls_get_NativeInterface_m0B8B1D4A4F73BE68A2E945017CE920053325F1D1 (Build.wasm.br:0x23579ac)
    at MonoTlsProviderFactory_InitializeProviderRegistration_m1D24100D1C54F7529B4432D69EAE8EBCB3116B10 (Build.wasm.br:0x2365f1c)
    at MonoTlsProviderFactory_InitializeInternal_m719BE4475DBBA40EB7E0BBF3C3D65F17791E488A (Build.wasm.br:0x2361fbe)
    at MonoTlsProviderFactory_GetProviderInternal_m08BDCDD3919FBAEDFB32CB5F0876D10E32C147A7 (Build.wasm.br:0x2361c9a)
    at MonoWebRequestHandler_CreateWebRequest_mBB805D3B8032C3CB3B2D71E04E3C319F0E627D1F (Build.wasm.br:0x2080072)
    at U3CSendAsyncU3Ed__99_MoveNext_mD015CC1B55C285519224F811D1CA69F527F8F633 (Build.wasm.br:0x2082bcd)
    at AsyncTaskMethodBuilder_1_Start_TisU3CSendAsyncU3Ed__99_t7F65CEF5874E988C0C5867B0B6EA5E52FBF3DB22_mA4F41AC898AFC342AA04CBC328540329A15BB400_gshared (Build.wasm.br:0x1efd40e)
    at MonoWebRequestHandler_SendAsync_m218FBC412C4300E40FF988645B1BF648580D5B2F (Build.wasm.br:0x20823fe)
    at HttpClientHandler_SendAsync_m024FF40EDC1A14211704DB0DE00BCB7B9E9FD406 (Build.wasm.br:0x207fa91)
    at U3CSendAsyncWorkerU3Ed__47_MoveNext_mE32A14C1E715F40E33134DD8478CDFA53F9B0195 (Build.wasm.br:0x208638a)
    at AsyncTaskMethodBuilder_1_Start_TisU3CSendAsyncWorkerU3Ed__47_tB6556DD755EDCDAD5DC1F1C5F5CA314BA5B282A5_m0B8B43F67B798C7EF2B0D99B5BAC790EB8FC918D_gshared (Build.wasm.br:0x1efb478)
    at HttpClient_SendAsyncWorker_m705970670309B586A349D3D8E0A6F7FC41866656 (Build.wasm.br:0x2085f61)
    at HttpClient_SendAsync_m5C9B076F873C5D2F4E5301937A1AFE3427346E71 (Build.wasm.br:0x20859f9)
    at U3CProcessSyncOrAsyncU3Ed__11_MoveNext_m1B9D44CD5A41B1C0B41CE63933F1EC58F4B557A5 (Build.wasm.br:0x2c8d140)
    at AsyncTaskMethodBuilder_Start_TisU3CProcessSyncOrAsyncU3Ed__11_t674D7A01939B5482636BAB03A832FB3B24B9654E_m0BA5CD8DB3B3D1842318B3E2A9753CF9797DD8A7_gshared (Build.wasm.br:0x1f2112a)
    at HttpClientTransport_ProcessSyncOrAsync_mA083BCA2917543F169E32BA27DD4066626C8C655 (Build.wasm.br:0x2c89d8b)
    at HttpClientTransport_ProcessAsync_m1761D068B0677D202F7E04F34700D321DA7DB8EF (Build.wasm.br:0x2c89ca6)
    at U3CProcessAsyncU3Ed__4_MoveNext_mDE2424E93432F74F3013CD81A5EC5E339C504B5B (Build.wasm.br:0x2c918a3)
    at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__4_t00983D3D0D47391E37257685EBE5FF10B91AA680_m13FE4D4D916E5F6FDFB67A4D4CFC9279CA3726DB_gshared (Build.wasm.br:0x1f21606)
    at HttpPipelineTransportPolicy_ProcessAsync_m3C25036DB5D04FBFFF7CEB47BAEBD5A33918B882 (Build.wasm.br:0x2c9176d)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at RequestActivityPolicy_ProcessNextAsync_m5EC7D6D32A5C147245C8B4C82C42CAEBFF26091A (Build.wasm.br:0x2c96c95)
    at RequestActivityPolicy_ProcessAsync_m82F75E862DCE63641B8C8E85E983C62F232C99F4 (Build.wasm.br:0x2c96915)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at U3CProcessAsyncU3Ed__5_MoveNext_m933D3B8DA7C67C8FC8657B393695C5D0220A0B34 (Build.wasm.br:0x2c99423)
    at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__5_tB70F4472A669BD4E06EC37BA67D55F7118C9CA9C_m3EA2D5308AA9354EE043E3F06D45EECE6DEB87CA_gshared (Build.wasm.br:0x1f22f89)
    at ResponseBodyPolicy_ProcessAsync_mB62326D63CBCCAF063D38DB7DBB89D230E21F592 (Build.wasm.br:0x2c98100)
    at ResponseBodyPolicy_ProcessAsync_mB10AF5227BC75E3FAEC126C95B7579AB95F6B753 (Build.wasm.br:0x2c97fb6)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at LoggingPolicy_ProcessAsync_m198B6062B96AE46B25433F40B82005FE71C53B1C (Build.wasm.br:0x2c91f0e)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at U3CProcessAsyncU3Ed__7_MoveNext_m8F9EA47A96B2E7FE7115715803837F34D5DF9C00 (Build.wasm.br:0x2c9b4c6)
    at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__7_tF93FCBDE185D82EE192E9D733BD7D1BB5C66A6A8_mA0FF30FF95590F3DB17B74A8250EDE9AC5C6AF9C_gshared (Build.wasm.br:0x1f22aad)
    at RedirectPolicy_ProcessAsync_mEA2EDA716DCAEF6C683075ED727FC2002B263866 (Build.wasm.br:0x2c9aa97)
    at RedirectPolicy_ProcessAsync_m66AAF4BFD94B8542C09FF759339D10F31AFE06E5 (Build.wasm.br:0x2c9b28c)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at U3CProcessAsyncU3Ed__5_MoveNext_m7BDC7E3865E802F3BB57BCDD8F25CC6F47CFFF93 (Build.wasm.br:0x2c9cb50)
    at AsyncTaskMethodBuilder_Start_TisU3CProcessAsyncU3Ed__5_tFA89897995094E505CC8D6917121AEE03E3259C5_m7077D434CD9D20629AD7E81ACE6B25F27B089434_gshared (Build.wasm.br:0x1f230c0)
    at RetryPolicy_ProcessAsync_mEF998472D48BA42D2F7C9FA97A32CF6C257A4389 (Build.wasm.br:0x2c9c1bd)
    at RetryPolicy_ProcessAsync_m6984D901B06EA9A0393237228D864C24D29D3A93 (Build.wasm.br:0x2c9c0cd)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at HttpPipelineSynchronousPolicy_ProcessAsync_m522AA5120C6F5E7D0999ABC89DB55659701D0781 (Build.wasm.br:0x2c90a66)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at HttpPipelineSynchronousPolicy_ProcessAsync_m522AA5120C6F5E7D0999ABC89DB55659701D0781 (Build.wasm.br:0x2c90a66)
    at HttpPipelinePolicy_ProcessNextAsync_m484E15B0BB005F0F1D5531F8D3E0006B3827FE0C (Build.wasm.br:0x2c907a5)
    at HttpPipelineSynchronousPolicy_ProcessAsync_m522AA5120C6F5E7D0999ABC89DB55659701D0781 (Build.wasm.br:0x2c90a66)
    at HttpPipeline_SendAsync_mB1D0B5B2593F7AEA568B48AC56751A7A1FB8A28A (Build.wasm.br:0x2c8dab9)
    at U3CSendRequestAsyncU3Ed__18_MoveNext_m15B9E19C255F658D4FC72DBB9C5E5208F6200F39 (Build.wasm.br:0x2c8ef23)

I’m not sure if this is a Mono bug or an IL2CPP bug, or maybe even a WebGL specific bug, and I wonder if other people have had a similar problem like this one.

These are almost certainly not compatible with Unity WebGL builds. Specifically, I believe HttpClient requires threading which isn’t available on the web (single threaded).

Search for HttpClient and web, I don’t think anyone has ever gotten this to work in a Unity web build.