同源策略是Web浏览器中的一种标准安全机制,该机制仅允许两个URL共享相同的起源(即相同的协议,端口和主机)之间进行通信。 例如,位于http:// localhost:6000的客户端或脚本将无法访问位于http:// localhost:5080的服务器应用程序,因为这两个URL具有不同的端口地址。 您的Web浏览器中的安全限制将不允许向另一个域中的服务器应用程序发出请求。
这就是CORS(跨原始资源共享)的救援来源。 CORS是W3C标准,可让您绕过浏览器采用的默认同源策略。 简而言之,您可以使用CORS允许某些跨域请求,同时阻止其他请求。 在本文中,我们将研究如何在ASP.Net Core中启用和配置CORS。
[ 什么是TypeScript? 工业强度JavaScript 。 •使用InfoWorld的TypeScript版本功能跟踪器查看TypeScript的频繁更新中的新功能 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]
在Visual Studio 2017中创建ASP.Net Core Web API项目
首先,让我们在Visual Studio中创建一个ASP.Net Core Web API项目。 如果您的系统已启动并运行Visual Studio 2017,请按照下面概述的步骤创建一个ASP.Net Core Web API项目。
- 启动Visual Studio 2017 IDE。
- 单击文件>新建>项目。
- 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
- 指定项目的名称。
- 单击确定保存项目。
- 将显示一个新窗口“ New .Net Core Web Application…”。
- 从顶部的下拉列表中选择“ .Net Core”作为运行时,并选择ASP.NET Core 2.1(或更高版本)。
- 选择“ API”作为项目模板。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框。 我们将不在这里使用Docker或HTTPS。
- 确保选择“无身份验证”,因为我们也不会使用身份验证。
这将在Visual Studio中创建一个新的ASP.Net Core项目。 在以下各节中,我们将使用该项目来启用和配置CORS。 我们将此项目称为服务器应用程序。 现在,您可以在Visual Studio中创建另一个.Net Core Web Appication项目,以用作客户端应用程序。
请注意,如果尝试通过进行AJAX调用从客户端应用程序访问服务器应用程序的控制器方法,则会看到Web浏览器拒绝了该请求。 这是因为未在服务器应用程序中启用CORS。
将CORS添加到ASP.Net Core请求处理管道
要在ASP.Net Core中使用CORS,我们需要遵循以下步骤:
- 安装CORS中间件。
- 通过ConfigureServices方法将CORS中间件添加到管道中。
- 在Configure方法中启用CORS。
- 在控制器,操作方法或全局中启用CORS。
Microsoft.AspNetCore.Cors软件包是CORS中间件,可以在ASP.Net Core中利用它来实现跨域资源共享。 要安装此软件包,请单击工具> NuGet软件包管理器>管理解决方案的NuGet软件包。 然后在NuGet程序包管理器中搜索Microsoft.AspNetCore.Cors程序包并进行安装。 撰写本文时,Microsoft.AspNetCore.Cors软件包的最新稳定版本是2.2.0。
接下来,将跨域资源共享服务添加到管道中。 为此,请在Startup类的ConfigureServices方法中的IServiceCollection实例上调用AddCors方法,如下面的代码片段所示。
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
在ASP.Net Core中配置CORS策略
您可以在ASP.Net Core中以各种方式配置CORS策略。 例如,以下代码段仅允许访问特定的来源。
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
builder => builder.WithOrigins("http://localhost:60571"));
});
除了WithOrigins方法外,ASP.Net还为我们提供了许多其他与其他策略选项相关的方法。 其中包括:
- AllowAnyOrigin-用于允许从任何来源访问资源
- AllowAnyHeader-用于允许请求中的所有HTTP标头
- AllowAnyMethod-用于允许访问任何HTTP方法
- AllowCredentials-用于通过跨域请求传递凭据
- WithMethods-用于仅允许访问特定的HTTP方法
- WithHeaders —用于仅允许访问特定的标头
如果要允许多个源访问资源,则可以在ConfigureServices方法中指定以下内容。
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
builder => builder.WithOrigins("http://localhost:60571", "http://localhost:60890"));
});
如果要允许任何源访问资源,则应使用AllowAnyOrigin方法而不是WithOrigins方法。 下面给出的代码段说明了如何使用任何方案允许来自所有来源的CORS请求。
services.AddCors(options =>
{
options.AddPolicy("AllowAllOrigins",
builder => builder.AllowAnyOrigin());
});
CORS是一种有用的机制,可让我们灵活地绕过Web浏览器的同源策略的限制。 当我们要允许跨域访问我们的服务器应用程序时,我们可以使用ASP.Net Core中的CORS中间件来做到这一点,同时利用各种跨域访问策略。
From: https://www.infoworld.com/article/3327562/how-to-enable-cors-in-aspnet-core.html