gpt4 book ai didi

c# - 具有授权属性的 ASP.NET 5 beta8 CORS 不工作

转载 作者:行者123 更新时间:2023-11-30 12:24:39 24 4
gpt4 key购买 nike

在 beta7 中,CORS 可以这样设置:

// in the ConfigurationServices
services.AddMvc();
services.ConfigureCors(options =>
{
// set cors settings...
});

//...
// in the Startup.Configure method
app.UseCors();
app.UseMvc();

它就像一个魅力,但 beta8 打破了它。我发现了这个问题:Why Cors doesn't work after update to beta8 on ASP.NET 5? ,并像这样修复:

// in Startup.ConfigureServices method
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
// allow them all
builder.AllowAnyHeader();
builder.AllowAnyMethod();
builder.AllowAnyOrigin();
builder.AllowCredentials();
});
});
services.AddMvc();

//...
// in the Startup.Configure method
app.UseMvc();

//...
// in the Controller
[EnableCors("CorsPolicy")]
public IActionResult Get()
{
return OK();
}

是的,它再次工作,但是当我添加 [Authorize("Bearer")] 时, Controller 通过 ajax 调用返回 401 Unauthorized for OPTIONS 请求。这是 HTTP 请求和响应。

[请求]

OPTIONS https://api.mywebsite.net/ HTTP/1.1
Accept: */*
Origin: https://myanotherwebsite.net
Access-Control-Request-Method: GET
Access-Control-Request-Headers: accept, authorization
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko
Host: api.mywebsite.net
Connection: Keep-Alive
Cache-Control: no-cache

[回应]

HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-IIS/8.0
WWW-Authenticate: Bearer
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=...;Path=/;Domain=api.mywebsite.net
Date: Fri, 23 Oct 2015 09:56:34 GMT

如何在 ASP.NET 5 beta8 中使用 [Authorization] 属性启用 CORS?

编辑我能够使用默认的 ASP.NET MV C6 模板 (beta 8) 重现此问题。当我用 [EnableCors][Authorize] 装饰 Controller 或方法时,它返回 401 Unauthorized(或 302 重定向到登录页面)。

编辑2事实证明,这是我犯的一个愚蠢的错误。我自己回答出了什么问题。

最佳答案

好吧,这是我的愚蠢错误。我对 Microsoft.AspNet.Mvc.CorsMicrosoft.AspNet.Cors 感到困惑。

上一篇是关于OWIN中间件的,另一篇是关于Mvc filter的。我没有在 Project.json 中添加 Microsoft.AspNet.Cors,也没有在 Configures 中添加 app.UseCors() ()

ConfigureServices()中的AddCors()Configure()中的UseCors()都是需要一起工作。

这可能是 CORS 的基本设置。

(在 Project.json 中)

"dependencies": {
...
"Microsoft.AspNet.Cors": "6.0.0-beta8",
"Microsoft.AspNet.Mvc.Cors": "6.0.0-beta8",
...
}

(在Startup.cs中)

public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
{
// ...build cors options...
});
});
services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseCors("CorsPolicy");
app.UseMvc();
}

或者,这个:

public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseCors(builder =>
{
// ...default cors options...
});
app.UseMvc();
}

希望没有人像我一样犯愚蠢的错误。

关于c# - 具有授权属性的 ASP.NET 5 beta8 CORS 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299730/

24 4 0
文章推荐: c# - 包含项目对的匹配项
文章推荐: javascript - 如何访问弹出窗口生成的弹出窗口?
文章推荐: c# - 绑定(bind)到 IEnumerable 依赖属性