在.NET Core Web 应用程序中使用 AJAX 和跨域资源共享(CORS)是非常常见的。但是,由于安全性和浏览器规则,CORS会引起许多问题。本篇文章旨在介绍.NET Core中的CORS问题以及如何解决它们。
背景
在网络应用中,我们有时需要从不同的源获取资源。当 JavaScript从一个网站中请求数据另一个网站上时,就会发生CORS问题。浏览器会发送一个 OPTIONS 请求头,以确认远程服务器是否与当前网站允许此请求。如果要么远程服务器不允许该请求,要么当前网站不允许该请求,则浏览器将阻止此请求并引发CORS异常。为了避免这些问题,我们必须通过配置我们的.NET Core应用程序来处理CORS请求。
解决方法
方法1: 使用 Microsoft.AspNetCore.Cors 包
为了使.NET Core应用程序支持CORS,我们需要启动Microsoft.AspNetCore.Cors扩展包。因此,首先,在 NuGet 包管理器中搜索 Microsoft.AspNetCore.Cors
并安装该软件包。
接下来,在 Startup.cs 文件中添加以下代码:
------ ---- ------------------------------------ --------- - ------------------------ -- - ----------------------------- ------- -- - ------------------------ ----------------- ------------------ --- --- ------------------ - ------ ---- ----------------------------- ---- ------------------- ---- - ------------------------ ------------- -
上述代码将允许任何来源的跨域http请求(即, AllowAnyOrigin()
),同时还允许使用任何方法和标题( AllowAnyMethod()
和AllowAnyHeader()
)。您可以根据需要更改此配置。这些将添加到应用程序的 IOC 容器和请求处理管道中。
方法2: 自己实现CORS
.NET Core应用程序还支持自定义 CORS 实现。如果我们不想使用 Microsoft.AspNetCore.Cors 包,或者我们需要更详细的控制,则可以从头开始编写CORS逻辑。
在 Startup.cs 文件中添加以下代码:
------ ---- ------------------------------------ --------- - -- -- ---- ------------------------ -- - ----------------------------------------- ------- -- - -------------------------------------------- ----------------- ------------------ --- --- ------------------ - ------ ---- ----------------------------- ---- ------------------- ---- - ------------- --------- ----- -- - ----------------------------------------------------------- ------------------------- ------------------------------------------------------------ -------------- ------------------- ------------------------------------------------------------ ----- ----- ------- --- ----------------- -------------------------- -- - --------------------------- --- -
上述代码将允许从 http://localhost:4200 请求我们的 API。这里,我们设置了特定的来源 ( WithOrigins()
),允许使用任何头和方法 (AllowAnyHeader()
和 AllowAnyMethod()
)。
示例代码
以下是一个跨域POST请求的实现示例:
-------- ----- ------- ------------ ------------------- --------- ------- ---- ------------------------------------- ----- ------------------- ------------ ----- -------- -------- ------ - ------------------ -- ------ -------- ----- ----------- ------------ - ---------------------------- - ---
结论
.NET Core中的CORS问题既常见又困难,但是可以通过Microsoft.AspNetCore.Cors包或自定义解决方案成功解决。以上示例和代码都可以帮助您开始解
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6729cd512e7021665e25b11e