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

API与ASP.NET Core MVC Web应用通信是否需CORS?为何未配置仍可用?

问题解答

你的代码示例

API代码

[ApiController] 
[Route("[controller]")]
public class APIController : ControllerBase
{
    // [Authorize]
    [HttpGet("[action]")]
    public string GetInformation() { return "Something !";  }
}

MVC Action代码

public async Task<IActionResult> GetInfoFromAPI()
{
    using var client = new HttpClient();

    var requ = new HttpRequestMessage
    {
        Method = HttpMethod.Get,
        RequestUri = new Uri("http://localhost:5000/API/GetInformation"),
        Content = new StringContent(string.Empty, Encoding.UTF8, MediaTypeNames.Application.Json)
    };

    var resp = await client.SendAsync(requ);
    var Result = await resp.Content.ReadAsStringAsync();

    return View("GetInfoFromAPI", Result); 
}

为什么没配置CORS还能正常调用?

因为CORS是浏览器专属的安全限制机制,只有当请求是从浏览器端的脚本(比如网页里的JS代码用fetch/XMLHttpRequest发起)触发时,才会触发CORS校验。

你这里是在MVC的后端代码里用HttpClient发起的请求,属于服务器与服务器之间的直接调用,完全不经过浏览器的安全拦截逻辑,所以不管API有没有配置CORS,这种调用都能正常工作。

CORS到底是什么?它的作用是什么?

CORS(跨源资源共享)是浏览器为保护用户安全实现的同源策略补充机制:

  • 浏览器默认限制脚本只能请求同源的资源(同源指协议、域名、端口三者完全一致,比如http://localhost:5000和http://localhost:5001就属于不同源)。
  • CORS让服务器可以声明允许哪些外部域名的浏览器脚本访问自己的资源,本质是防止恶意网站通过脚本窃取其他网站的用户敏感数据(比如登录态、个人信息)。

举个例子:如果你的前端页面部署在http://localhost:5001,在页面里用JS调用http://localhost:5000的API,这时候浏览器就会触发CORS检查,要是API没配置允许5001这个源的访问,浏览器就会直接拦截请求,控制台抛出跨域错误。

内容的提问来源于stack exchange,提问作者YaSecu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:57:33