我正在尝试使用 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 需要做什么有一个相当好的想法。它比看起来简单,真的。