客户端 Blazor 将 SendAsync 用于 GetRequest,将 CORS 用于 API 请求

Client-side Blazor using SendAsync for a GetRequest with CORS for an API request

提问人:Kasper Olesen 提问时间:11/6/2019 更新时间:10/6/2020 访问量:1148

问:

在设置 Blazor 客户端 API 客户端以发出请求时,我遇到了一些 CORS 问题。我想我找到了解决方案,但解决方案也抛出了错误。

主要错误是: “WASM:System.Net.Http.HttpRequestException:TypeError:无法对”Window“执行”fetch“:提供的值”2“不是 RequestCredentials 类型的有效枚举值。”

代码是

        string link = API_RequestLoginTokenEndPoint;

        Http.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
        Http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "basic:testuser:testpassword");

        var requestMessage = new HttpRequestMessage(new HttpMethod("GET"), link);

        requestMessage.Properties[WebAssemblyHttpMessageHandler.FetchArgs] = new
        {
            credentials = FetchCredentialsOption.Include
        };

        var response = await Http.SendAsync(requestMessage);
        var responseStatusCode = response.StatusCode;
        var responseBody = await response.Content.ReadAsStringAsync();

        output = responseBody + " " + responseStatusCode;

我还尝试将请求消息更改为: var requestMessage = new HttpRequestMessage(HttpMethod.Get, link);

如果这是错误所指的 ENUM。在Startup ConfigureServices中,我尝试添加: WebAssemblyHttpMessageHandler.DefaultCredentials = FetchCredentialsOption.Include;

我正在使用 Blazor 预览版 9。我还尝试在 API 路由上的 PHP 脚本中添加一些 CORS 代码,该脚本应该接受所有来源,但是我发布的最后一个问题被告知使用此方法来修复 CORS 问题,现在给了我一个新错误。

我是做错了什么还是错过了什么?浏览器中的错误通常指向带有异步请求的行: var 响应 = await Http.SendAsync(requestMessage);

C# CORS 客户端 Blazor WebAssembly

评论


答:

2赞 agua from mars 11/6/2019 #1

这是一个尚未修复的错误。请改用这个:

requestMessage.Properties[WebAssemblyHttpMessageHandler.FetchArgs] = new
        {
            credentials = "include"
        };

评论

0赞 Kasper Olesen 11/6/2019
但我在示例代码中这样做了。var requestMessage = new HttpRequestMessage(new HttpMethod(“GET”), link);requestMessage.Properties[WebAssemblyHttpMessageHandler.FetchArgs] = new { credentials = FetchCredentialsOption.Include };var 响应 = await Http.SendAsync(requestMessage);但我仍然收到错误。
0赞 Kasper Olesen 11/6/2019
哦,等等......它不完全相同。我会试试这个。
0赞 Kasper Olesen 11/6/2019
那奏效了......除了现在我又回到了原始的 CORS 错误:从源“titsam.dk”获取“titsam.dk/ntbusit/busitapi/requestLoginToken.php”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”,以便在禁用 CORS 的情况下获取资源。
0赞 agua from mars 11/6/2019
在浏览器调试工具和 CORS 策略中检查浏览器发送的请求标头
0赞 Kasper Olesen 11/6/2019
我希望我已经用我在这个问题中链接的PHP代码准备好了服务器:stackoverflow.com/questions/58689421/......我看不到如何检查浏览器调试工具中的标头?
0赞 Jim B 10/6/2020 #2

我遇到了类似的问题,无法解决飞行前活动。

我能够通过注释掉HTTP重定向中间件来解决这个问题

context:Blazor 客户端在不同的 url 中调用 asp.net.core api。

不确定这是否是一个好的解决方案,但我觉得我需要在之后提到这一点 在这个令人沮丧的问题上花了 1 周时间!希望它对某人有所帮助。