提问人:Kasper Olesen 提问时间:11/6/2019 更新时间:10/6/2020 访问量:1148
客户端 Blazor 将 SendAsync 用于 GetRequest,将 CORS 用于 API 请求
Client-side Blazor using SendAsync for a GetRequest with CORS for an API request
问:
在设置 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);
答:
这是一个尚未修复的错误。请改用这个:
requestMessage.Properties[WebAssemblyHttpMessageHandler.FetchArgs] = new
{
credentials = "include"
};
评论
我遇到了类似的问题,无法解决飞行前活动。
我能够通过注释掉HTTP重定向中间件来解决这个问题。
context:Blazor 客户端在不同的 url 中调用 asp.net.core api。
不确定这是否是一个好的解决方案,但我觉得我需要在之后提到这一点 在这个令人沮丧的问题上花了 1 周时间!希望它对某人有所帮助。
评论