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
相关产品推荐
相关产品推荐

