web-dev-qa-db-ja.com

CORS in ASP .NET MVC5

クロスドメインを公開したいJSONコントローラーメソッドがいくつかあるMVCプロジェクトがあります。サイト全体ではなく、これら2つの方法だけです。

私は基本的に、この投稿で述べられているとおりの正確なことをしたいと思っています:

http://enable-cors.org/server_aspnet.html

ただし、問題は、WEB APIではなく、通常のMVCプロジェクトがあることです。つまり、登録を記録する手順を実行できないということです。

public static void Register(HttpConfiguration config)
{
    // New code
    config.EnableCors();
}

私のMVCプロジェクトには存在しないため、メソッド。

MVCプロジェクトですが、このライブラリを使用する方法はありますか?

私はこれをweb.configを介して設定できることを知っています:

<httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="http://www.domain.com" />
      </customHeaders>
</httpProtocol>

しかし、すべてのメソッドを公開したくはありません。メソッドにアクセスするために複数のドメイン(2つのドメイン)を指定したいです...

44
user4309587

ここで説明されているように、 ASP.Net MVCでAccess-Control-Allow-Originを設定する-最も簡単な方法

アクションフィルターを作成し、そこにヘッダーを設定するだけです。このアクションフィルターは、アクションメソッドでどこでも使用できます。

public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.OnActionExecuting(filterContext);
    }
}

複数のドメインを追加する場合、ヘッダーを複数回設定することはできません。アクションフィルターでは、要求元のドメインがドメインのリストに含まれているかどうかを確認し、ヘッダーを設定する必要があります。

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var domains = new List<string> {"domain2.com", "domain1.com"};

        if (domains.Contains(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Host))
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        }

        base.OnActionExecuting(filterContext);
    }
62