owin cors 或 web api cors
在 web-api 上有 100 個關於 CORS 的問題,關於如何啟用 CORS,每個問題都有不同的答案。我很困惑,不知道哪個答案是正確的。問題是沒有一個答案真正解釋了每一行程式碼的作用,這樣我就可以理解和解決我的問題,而不是複制粘貼程式碼。
無論如何,問題是:我正在使用 owin 使用 asp.net web api 2。我需要啟用 CORS。我該怎麼做?OWIN有cors設置
application.UseCors(CorsOptions.AllowAll);並且有 asp.net web api 的 cors 設置
var cors = new EnableCorsAttribute("*", "*", "*", "*"); config.EnableCors(cors);鑑於我沒有使用 OAUTH,我應該使用哪一個(我之所以指定這一點,是因為當我們使用 OAUTH v/s 而我們不使用它時,SO 上的答案會有所不同)。
我需要為 OWIN 和 WEB-API 啟用 CORS 還是只為其中一個啟用 CORS。如果兩者都啟用,則會出現問題,請閱讀此處
如果有人可以向我解釋兩者之間的區別,那將非常有幫助
- 歐文CORS
- WEB API CORS
- 使用 OWIN/WEBAPI 和 OAUTH 的 CORS
還有針對 owin 託管的 web-api 的自託管 web api 的答案,這進一步增加了 confution :(,對不起,咆哮
有辦法解決這個問題。由於 OWIN 和 ASP.NET.CORS 庫同時工作。Owin 令牌或身份驗證方法需要配置為與所有其他 API 控制器分開啟用 CORS。
首先,不要在 Startup.cs 中將 cors 與 Owin 一起使用:
public void Configuration(IAppBuilder app) { //app.UseCors(CorsOptions.AllowAll);找到 GrantResourceOwnerCredentials 方法並將 Access-Control-Allow-Origin 添加到上下文中,這樣當它在身份驗證完成後返回呼叫時,瀏覽器會找到標頭並接受它。
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "http://localhost" });現在從 Nuget 安裝 Microsoft.AspNet.WebApi.Cors 包到您的 webapi 項目,並將其添加到註冊方法
public static void Register(HttpConfiguration config) { var cors = new EnableCorsAttribute("http://localhost, ", "accept,accesstoken,authorization,cache-control,pragma,content-type,origin", "GET,PUT,POST,DELETE,TRACE,HEAD,OPTIONS"); config.EnableCors(cors);為我工作。
Web API's CORS如果您需要將CORS應用於您的API Controllers ,您應該使用。對於其他所有內容(例如令牌服務),您必須使用Owin.Cors.如果您最終同時使用兩者,則需要確保它們不會重疊並將CORS兩次應用於同一請求。
Web API 2.2通過提供EnableCorsAttribute. _基本用法
[EnableCors("*", "*", "*")] public class ResourcesController : ApiController { ...屬性定義
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = false)] public EnableCorsAttribute( string origins, string headers, string methods )要在全球範圍內啟用 CORS,請使用
public static class WebApiConfig { public static void Register(HttpConfiguration config) { var cors = new EnableCorsAttribute("www.example.com", "*", "*"); config.EnableCors(cors); // ... } }您還需要從 nuget 安裝 CORS 包
Install-Package Microsoft.AspNet.WebApi.Cors