MVC 5でクロスオリジンリクエスト(CORS)で動作するWebアプリケーションを作成しようとしています。結果なしですべてを試しました。
属性付き
public class AllowCrossSiteJsonAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
EnableCors属性を使用
[EnableCors("*")]
何もうまくいかない私はそれが不可能だと思い始めています
クロスオリジンリクエストを有効にするには、[EnableCors]
属性をWeb APIコントローラーまたはコントローラーメソッドに追加します。
[EnableCors(origins: "http://systematixindia.com", headers: "*", methods: "*")]
public class TestController : ApiController
{
// Controller method`enter code here`s not shown...
}
最も便利だと思うのは、次のような独自のクラスを作成することです。
次のコードが含まれています:
using System;
using System.Web.Mvc;
public class AllowCrossSiteAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost:4200");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true");
base.OnActionExecuting(filterContext);
}
}
この後、methodまたは全体controllerでこのデコレータを使用できます
この手順の後、応答ヘッダーでそれを見ることができるはずです
これに感謝します response
Web.configファイルに構成設定を追加して、customHeaders
のAccess-Control-Allow-Origin
の値を次のように設定します-
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
ApiControllersに加えて、MVC ControllerおよびOwinミドルウェアのCorsを有効にするために、OWIN CORS実装(nuget Microsoft.Owin.Cors)を使用して成功しました。 Microsoft.AspNet.WebApi.Cors(config.EnableCors()
および[EnableCors]
属性を使用)は、ApiControllersでのみ機能するようです。
サンプルコードについては、 http://benfoster.io/blog/aspnet-webapi-cors を参照してください。
「OnAuthentication」ステップに追加するか、Web構成に構成を追加する必要があると思います。あなたは私のコードを試すことができます:)それは動作します
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
}
}