CORS无法运行ASP.Net MVC5

时间:2018-04-17 23:54:01

标签: c# asp.net asp.net-mvc cors actionfilterattribute

我正在尝试使用CORS阻止对我的资源的跨域访问。我也尝试了WebApi.Cors和自定义ActionFilter。但我仍然可以从不允许的域访问数据。

我的ActionFilter代码低于

public class AllowCrossSiteAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true");
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "https://example.com");
            filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
            base.OnActionExecuting(filterContext);
        }
}

我的控制器

    [HttpGet]
    [AllowCrossSite]
    public ActionResult Index(string username)
    {
      //return json data
    }

这些标头存在于响应标头中,但为什么请求不会阻止来自其他域,我做错了什么?请帮忙

1 个答案:

答案 0 :(得分:2)

添加响应标头实际上不会提供任何类型的安全性。常规的cors实现仅添加这些响应头以通知客户端有关所应用的cors规则。

服务器上的某些内容需要将您的cors规则与请求的origin / method等标头进行比较,然后如果它们不匹配则发回4XX响应。< / p>

NuGet包Microsoft.AspNet.WebApi.Cors允许您执行以下操作:

[EnableCors(origins: "https://example.com")]

如果您更喜欢自己的自定义实现,可以在github上查看此属性的源代码。这应该让你很好地了解你需要做些什么才能让cors手工工作。它看起来比它看起来更简单。