ASP.net MVC5中的asp.net-mvc – CORS

前端之家收集整理的这篇文章主要介绍了ASP.net MVC5中的asp.net-mvc – CORS前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个MVC项目,其中有几个JSON控制器方法我想要暴露跨域。不是整个网站,只是这两种方法

我基本上想要在这篇文章中提到的确切的事情:

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

但是,问题是我有一个常规的MVC项目而不是一个WEB API,这意味着我无法遵循注册的步骤

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个域)来访问我的方法

解决方法

如下所述: Setting Access-Control-Allow-Origin in ASP.Net MVC – simplest possible method

您应该创建一个操作过滤器并将标题设置在那里。您可以随时随地使用此操作过滤器对您的操作方法

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);
    }
原文链接:https://www.f2er.com/aspnet/253350.html

猜你在找的asp.Net相关文章