如何在ASP.NET MVC中配置CORS,仅允许site.com域名访问接口
解决方案:用CORS限制跨域请求,结合Referer验证补充防护
首先明确:CORS完全适用于你的场景,它是浏览器层面规范跨域资源访问的标准机制,能精准限制只有指定域名(site.com)可以发起跨域POST请求到你的接口。
步骤1:安装CORS NuGet包
在Visual Studio的Package Manager Console中执行:
Install-Package Microsoft.AspNet.Cors
步骤2:配置CORS规则
方式一:针对单个接口(推荐,更精准)
在你需要限制的POST接口对应的Action上添加[EnableCors]特性,指定允许的域名、请求方法:
using System.Web.Mvc; using System.Web.Cors; public class YourController : Controller { // 仅允许site.com域名发起POST请求访问该接口 [EnableCors(origins: "https://site.com", headers: "*", methods: "POST")] [HttpPost] public ActionResult YourApiAction() { // 你的接口业务逻辑 return Json(new { result = "success" }); } }
方式二:全局配置(所有接口生效)
如果需要对全站所有接口统一设置跨域规则,在App_Start/FilterConfig.cs中注册全局CORS过滤器:
using System.Web.Mvc; using System.Web.Cors; public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { // 全局仅允许site.com的POST请求 var corsFilter = new EnableCorsAttribute("https://site.com", "*", "POST"); filters.Add(corsFilter); } }
同时确保在Global.asax.cs的Application_Start方法中启用CORS:
protected void Application_Start() { // 其他初始化代码 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); GlobalConfiguration.Configuration.EnableCors(); }
补充:针对非浏览器请求的防护(可选)
CORS仅作用于浏览器发起的跨域请求,如果有人通过服务器端工具(如curl、Postman)直接调用你的接口,CORS无法限制。这种情况可以通过检查请求的Referer头做辅助验证:
[HttpPost] public ActionResult YourApiAction() { // 验证Referer是否来自site.com if (Request.UrlReferrer == null || !Request.UrlReferrer.Host.Equals("site.com", StringComparison.OrdinalIgnoreCase)) { return new HttpStatusCodeResult(System.Net.HttpStatusCode.Forbidden, "Invalid request origin"); } // 业务逻辑 return Json(new { result = "success" }); }
注意:Referer头可以被伪造,因此只能作为CORS的补充防护,不能替代CORS。
关键说明
- 确保将
https://site.com替换为你实际的域名(如果使用HTTP则写http://site.com) - 如果需要允许子域名(如
sub.site.com),可以使用通配符https://*.site.com,但需谨慎使用 - CORS会自动处理浏览器的预检请求(OPTIONS),无需额外编写逻辑
内容的提问来源于stack exchange,提问作者Anton Makarov
相关产品推荐
相关产品推荐

