CORS 在 MVC5 ASP.Net 不起作用



我正在尝试使用 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
    }

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

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

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

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

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

如果您希望执行自己的自定义实现,可以在 github 上查看此属性的源代码。这应该让你对手工制作 cors 需要做什么有一个相当好的想法。它比看起来简单,真的。

最新更新