API 和 ASP.NET Core MVC Web 应用程序之间的通信 - 是否需要“CORS”?

问题描述 投票:0回答:2

这是我的API:

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

这是我在 ASP.NET Core 5 MVC Web 应用程序中的操作:

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); 
}

太棒了!它是如何工作的?为什么它有效?我没有在 API 启动中启用“跨源请求”(CORS)!

如果任何来源的

HttpGet/Post/...
都可以从我的API获取信息,那么CORS是什么?它有什么用?

asp.net-core asp.net-core-mvc cors asp.net-core-webapi
2个回答
1
投票

进一步解释 Yehor 在评论中所说的话:

跨源资源共享是网络浏览器中的一项安全功能,其目的是帮助限制一个源(域)上的脚本向另一个源发出请求。开发此机制是为了缓解跨站点请求伪造 (CSRF/XSRF)、跨站点脚本 (XSS) 和其他跨源攻击等攻击。识别出跨源请求后,浏览器会向目标服务器发送带有“Origin”标头的 HTTP 请求。然后,服务器使用 CORS 标头进行响应,指示请求是否可接受,这取决于服务器的 CORS 策略配置。

在您的情况下,CORS 策略不相关,因为两台服务器在反向通道(机器到机器)中进行通信,而不涉及浏览器。换句话说,由于 CORS 是一种应用于 Web 浏览器级别(前通道)的机制,因此当两个服务器在 bnack 通道中通信而不涉及浏览器时,它不适用。希望这有帮助。


1
投票

这里的文档展示了如何在 ASP.NET Core 应用程序中启用跨域资源共享 (CORS)。

浏览器安全性防止网页向某个网页发出请求 与提供该网页的域不同的域。这 这种限制称为“同源”策略。同源策略 防止恶意站点从另一个站点读取敏感数据 地点。有时,您可能希望允许其他网站进行 对您的应用程序的跨域请求。

因此,浏览器会报告
错误

。在你的场景中,它是mvc项目(一种服务器应用程序)调用web api(也是一种服务器应用程序),这里没有浏览器交互,这就是我们没有收到CORS错误的原因。顺便说一句,通过 postman 之类的工具测试 API 也不会出现 CORS 错误,因为 CORS 是由客户端的浏览器实现的,本质上是用来阻止访问跨域资源 不同的IP或端口也会导致CORS错误,这就是为什么我们有

.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()

    

© www.soinside.com 2019 - 2024. All rights reserved.