Bla*_*ise 72 cors asp.net-web-api
场景很简单,我需要从另一台服务器(不同于API服务器)登录才能检索访问令牌.
我Microsoft.Owin.Cors在API服务器上安装了包.在Startup.Auth.cs文件中,public void ConfigureAuth(IAppBuilder app)我加入了
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Run Code Online (Sandbox Code Playgroud)
在WebApiConfig.cs下面public static void Register(HttpConfiguration config),我添加了以下几行:
// Cors
var cors = new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
我还应该改变什么?
Bla*_*ise 78
看看我发现了什么!
在里面添加一些自定义标题<system.webServer>.
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
然后我可以进行CORS身份验证.
You*_*jae 47
我为基于AngularJS的Web客户端设置了很多试错法.
对我来说,下面的方法适用于ASP.NET WebApi 2.2和基于OAuth的服务.
Microsoft.AspNet.WebApi.Corsnuget包.Microsoft.Owin.Corsnuget包.config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE"));到上面的WebApiConfig.Register(config);行.app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);到Startup.Auth.cs文件.这必须在打电话之前完成IAppBuilder.UseWebApi我在这里找到了很多设置变化和组合stackoverflow或博客文章.所以,布莱斯的方法可能会或可能不会错.这只是我想的另一种设置.
Pio*_*ski 31
经过几个小时的搜索并查看了许多不同的解决方案,我已经设法按照下面的方式工作.
这种情况有很多原因.您很可能在错误的位置启用了CORS,或者启用了两次或根本没有启用CORS.
如果您正在使用Web API和Owin Token端点,那么您需要删除Web API方法中对CORS的所有引用并添加正确的owin方法,因为web api cors将无法使用Token端点,而Owin cors将适用于两个Web API和Token auth端点让我们开始:
确保已安装Owin Cors软件包删除您拥有的任何行eg.config.EnableCors(); 从您的WebAPIconfig.cs文件
转到您的startup.cs文件,确保在任何其他配置运行之前执行Owin Cors.
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); ConfigureAuth(APP);
如果仍有问题请访问:Startup.Auth.cs并确保在ConfigureAuth方法中有以下内容(如果您的startup.cs文件正确,则不需要此项)
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Kon*_*kus 21
<appSettings>
<add key="cors:Origins" value="*" />
<add key="cors:Headers" value="*" />
<add key="cors:Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
var appSettings = WebConfigurationManager.AppSettings;
// If CORS settings are present in Web.config
if (!string.IsNullOrWhiteSpace(appSettings["cors:Origins"]))
{
// Load CORS settings from Web.config
var corsPolicy = new EnableCorsAttribute(
appSettings["cors:Origins"],
appSettings["cors:Headers"],
appSettings["cors:Methods"]);
// Enable CORS for ASP.NET Identity
app.UseCors(new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = request =>
request.Path.Value == "/token" ?
corsPolicy.GetCorsPolicyAsync(null, CancellationToken.None) :
Task.FromResult<CorsPolicy>(null)
}
});
// Enable CORS for Web API
config.EnableCors(corsPolicy);
}
Run Code Online (Sandbox Code Playgroud)
注意:app.UserCors(...)应在配置ASP.NET标识之前调用.
Yar*_*ron 15
为了详细说明Youngjae的答案,有一个很好的教程,关于使用Web API设置OWIN并在http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-的过程中启用CORS.API-2-owin-ASP净同一性/
您将要使用以下命令为CORS添加NuGet包:
Install-Package Microsoft.Owin.Cors -Version 2.1.0
然后加
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
到Startup.cs中的Configuration方法,它看起来像:
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(config);
}
Run Code Online (Sandbox Code Playgroud)
我找到了答案
具体来说,使用OAuthAuthorizationServerProvider.GrantResourceOwnerCredentials实现的/ Token请求再次添加标头.在任何其他OWIN配置之前添加OWIN CORS内容,并根据该链接从GrantResourceOwnerCredentials中删除标头,然后瞧.祝好运.
我只是想分享我的经验.我花了一半的时间敲打我的脑袋,努力让它发挥作用.我阅读了很多文章和SO问题,最后我发现了什么是错的.
这条线
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Run Code Online (Sandbox Code Playgroud)
不是第一个在Startup课堂上的Configuration方法.当我把它移到顶部时 - 一切都开始神奇地工作了.
而在没有自定义页眉web.config或config.EnableCors(corsPolicy);或其他任何东西是必要的.
希望这能帮助别人节省一些时间.
| 归档时间: |
|
| 查看次数: |
79885 次 |
| 最近记录: |