You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:42:02