Je reçois une System.PlatformNotSupportedException
de la plate-forme mono lorsque j'essaie d'exécuter mon application blazor sur Webassembly. J'ai généré automatiquement un client API Web à l'aide d'Autorest. Tout se passe bien, mais lorsque je charge le code dans le navigateur, le message d'erreur ci-dessous apparaît dans la console du navigateur.
Utiliser un aperçu de la construction de VS2017.
module.printErr @ MonoPlatform.ts:192
WASM: [System.PlatformNotSupportedException] Operation is not supported on this platform.
WASM: at System.Net.WebProxy.CreateDefaultProxy () <0x204ed08 + 0x00004> in <1c80af700ca2462a80a92d89ad803d6a>:0
WASM: at System.Net.Configuration.DefaultProxySectionInternal.GetSystemWebProxy () <0x204ebc0 + 0x00000> in <1c80af700ca2462a80a92d89ad803d6a>:0
WASM: at System.Net.Configuration.DefaultProxySectionInternal.GetDefaultProxy_UsingOldMonoCode () <0x204ea80 + 0x00000> in <1c80af700ca2462a80a92d89ad803d6a>:0
WASM: at System.Net.Configuration.DefaultProxySectionInternal.GetSection () <0x204e8c8 + 0x00022> in <1c80af700ca2462a80a92d89ad803d6a>:0
WASM: at System.Net.WebRequest.get_InternalDefaultWebProxy () <0x204e610 + 0x0002c> in <1c80af700ca2462a80a92d89ad803d6a>:0
WASM: at System.Net.HttpWebRequest..ctor (System.Uri uri) <0x2043eb0 + 0x000d2> in <1c80af700ca2462a80a92d89ad803d6a>:0
WASM: at System.Net.Http.HttpClientHandler.CreateWebRequest (System.Net.Http.HttpRequestMessage request) <0x20434d0 + 0x00016> in <3a9393eaef104ec489024eb855a8f163>:0
WASM: at System.Net.Http.HttpClientHandler+<SendAsync>d__64.MoveNext () <0x203ea60 + 0x00076> in <3a9393eaef104ec489024eb855a8f163>:0
WASM: --- End of stack trace from previous location where exception was thrown ---
...
Oui c'est possible. Mais vous devez utiliser le HttpClient qui est injecté par le framework blazor comme décrit ici:
https://learn-blazor.com/architecture/rest-api/
(merci pour le lien Flores !)
HttpClient est marqué comme protégé dans le Microsoft.Rest.ServiceClient utilisé par Autorest. Donc, pour injecter le HttpClient à partir de blazor, vous pouvez créer un nouveau partiel de la classe client générée automatiquement et ajouter une méthode SetHttpClient
:
La classe générée par autorest:
public partial class YourApi : ServiceClient<YourApi>, IYourApi
{
...
}
Votre nouveau partiel:
public partial class YourApi
{
public void SetHttpClient(HttpClient client) {
this.HttpClient = client;
}
}
Sympa et simple!