Blazor oauth2 被 CORS 阻止

Posted

技术标签:

【中文标题】Blazor oauth2 被 CORS 阻止【英文标题】:Blazor oauth2 blocked by CORS 【发布时间】:2019-08-03 08:01:44 【问题描述】:

我在服务器端有一个控制器,如下所示:

 [HttpGet]
    public IActionResult Test(string returnUrl = "/")
    
        return Challenge(new AuthenticationProperties()  RedirectUri = returnUrl );
    

当我按下客户端的按钮时,我会调用:

await Http.GetAsync("/api/Login/Test");

问题是我在控制台中遇到了 cors 错误,但什么也没发生。如果我在浏览器(localhost/api/Login/test)中手动输入 url,它工作正常。

我添加了如下所示的 cors 策略:

services.AddCors(options =>
        
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        );

 app.UseCors("CorsPolicy");

这并没有什么不同。

【问题讨论】:

【参考方案1】:

使用这个:await Http.GetJsonAsync<put here your return type>("/api/Login/Test");

这是方法签名:

public static async Task<T> GetJsonAsync<T>(this HttpClient httpClient, string requestUri)

注意:您应该使用 HttpClientJsonExtensions 类中定义的方法。这些方法被配置为使用 javascript Fetch Web API 向您的 Web API 发出 Ajax 请求,更重要的是,它们知道您的应用程序的基本 uri (&lt;base href="/"&gt;)

见https://github.com/aspnet/AspNetCore/blob/5a70f5312fb57fc3788e5af56a99e7b43761e195/src/Components/Components/src/HttpClientJsonExtensions.cs

希望这会有所帮助...

【讨论】:

返回类型将是 IActionResult,我无法从客户端访问(据我所知),因为它是 Microsoft.AspNetCore.Mvc 的一部分。除非我添加了 nuget 包,但我觉得我这样做是走错路了 您要返回什么?您正在使用获取异步,对吗?你想得到什么……你想得到什么?你想做什么? 我想做一些等于&lt;a asp-action="Test" asp-controller="Login" class="btn btn-default"&gt;Log In&lt;/a&gt;【参考方案2】:

通过使用解决它

@inject Microsoft.AspNetCore.Components.Services.IUriHelper UriHelper

 UriHelper.NavigateTo("/api/Login/Test", forceLoad: true);

【讨论】:

以上是关于Blazor oauth2 被 CORS 阻止的主要内容,如果未能解决你的问题,请参考以下文章

Cors 阻止不和谐 oauth2 登录

Google OAuth2:重定向已被 CORS 政策阻止:请求需要预检,不允许遵循跨域重定向

为啥一个 Firebase 函数被 CORS 阻止了?

由于 CORS 错误,Axios 调用被阻止

重定向被 CORS 阻止

请求被 CORS 策略阻止