我正在尝试使用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
}
这些标头存在于响应标头中,但为什么请求不会阻止来自其他域,我做错了什么?请帮忙
答案 0 :(得分:2)
添加响应标头实际上不会提供任何类型的安全性。常规的cors实现仅添加这些响应头以通知客户端有关所应用的cors规则。
服务器上的某些内容需要将您的cors规则与请求的origin
/ method
等标头进行比较,然后如果它们不匹配则发回4XX响应。< / p>
NuGet包Microsoft.AspNet.WebApi.Cors
允许您执行以下操作:
[EnableCors(origins: "https://example.com")]
如果您更喜欢自己的自定义实现,可以在github上查看此属性的源代码。这应该让你很好地了解你需要做些什么才能让cors手工工作。它看起来比它看起来更简单。