ASP .NET MVC5 中的 CORS
Posted
技术标签:
【中文标题】ASP .NET MVC5 中的 CORS【英文标题】:CORS in ASP .NET MVC5 【发布时间】:2015-01-28 20:37:12 【问题描述】:我有一个 MVC 项目,其中有几个我想公开跨域的 JSON 控制器方法。不是整个网站,只有这两种方法。
我基本上想要这篇文章中关于 cors 的确切内容:
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的可能重复 是的,我已经看到了,但这基本上与添加如此处所述: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);
【讨论】:
Tjis 很有用,因为这样我就可以将它限制为仅用于我想要公开的方法,但是,我想允许两个不同的域..不是全部 (*) 而不仅仅是一个 (www.domain .com) 我可以为来源添加多个标题吗?例如:filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "domain1.com"); filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "domain2.com"); @user4309587 你不能从Request
获取域然后有条件地添加正确的标头值吗?
很好的答案!非常感谢你……我的代表不允许我给你投票……:(
这样进行域检查... if (!String.IsNullOrEmpty(domains.FirstOrDefault(s => s.Contains(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Host)))) / /(filterContext.RequestContext.HttpContext.Request.UrlReferrer.Host))
不适用于 Chrome/Firefox 获得 302... 见 ***.com/questions/35309831/…以上是关于ASP .NET MVC5 中的 CORS的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MVC5 RedirectResult () 重定向到 Asp.net 中的整页?
如何使用trackerenableddbcontext在asp.net mvc5和代码中的实体框架中实现审计跟踪