【问题标题】:Client-side Blazor using SendAsync for a GetRequest with CORS for an API request客户端 Blazor 使用 SendAsync 进行 GetRequest 使用 CORS 进行 API 请求
【发布时间】:2019-11-06 10:25:18
【问题描述】:

在设置 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。我还尝试在我的 PHP 脚本中添加一些 CORS 代码到应该接受所有来源的 API 路由上,但是我发布的最后一个问题被告知使用这种方法来修复 CORS 问题,这现在给了我一个新的错误。

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

【问题讨论】:

    标签: c# cors client-side blazor webassembly


    【解决方案1】:

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

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

    【讨论】:

    • 但是我在示例代码中这样做了。 var requestMessage = new HttpRequestMessage(new HttpMethod("GET"), link); requestMessage.Properties[WebAssemblyHttpMessageHandler.FetchArgs] = new {凭证 = FetchCredentialsOption.Include }; var response = await Http.SendAsync(requestMessage);但我仍然收到错误消息。
    • 哦,等等……它不完全一样。我会试试这个。
    • 那行得通...除了现在我回到原来的 CORS 错误:从原点 'titsam.dk' 获取在 'titsam.dk/ntbusit/busitapi/requestLoginToken.php' 的访问权限已被 CORS 策略阻止:响应预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
    • 在浏览器调试工具中检查你的浏览器发送的请求头和你的CORS策略
    • 我希望我已经使用我在这个问题中链接的 PHP 代码准备好服务器:stackoverflow.com/questions/58689421/… 我看不到如何检查浏览器调试工具中的标题?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多