手机版

谈谈如何在ASP.NET核心区实现CORS跨域

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

CORS(Cross-Origin Resource Sharing)是W3C标准,翻译过来就是“跨域资源共享”,主要解决Ajax跨域限制的问题。

CORS需要浏览器和服务器支持,现在所有现代浏览器都支持这一功能。注:IE10及以上

只要浏览器支持,其实所有的CORS配置都是在服务器端进行的,而前端操作浏览器会自动完成。

在本例中,我们将演示如何在ASP.NET核心中实现CORS跨域。

初步准备

你需要窗户。

您需要安装IIS。

建议使用VS2015 Update3或更高版本来完成此示例。下载地址://www . JB 51 . net/soft JC/446184 . html

的开发环境。NET Core需要安装,这里提供VS版本://www . JB 51 . NET/softs/472362 . html。

创建项目

在VS中,新建一个项目。项目类型是ASP.NET核心web应用程序(。net core),输入项目名称为CSASPNETCoreCORS,模板为空。

配置服务器

注意:添加以下代码时,IDE会提示代码错误,因为对应的包还没有被引用。转到错误报告行,单击灯泡并加载相应的包。

(图形无关)

打开Startup.cs

将以下代码添加到配置服务中:

服务。AddCors();将以下代码添加到配置方法中:

app。UseCors(builder=builder。with origins(http://localhost));完整的代码应该如下所示:

public void ConfigureServices(IServiceCollection services){ services。AddCors();} public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env,ILoggerFactory logger factory){ app。UseCors(builder=builder。with origins(' http://localhost ');app。run(async(context)={ wait context。回应。写异步('你好,世界!');});}让我们运行它:

输出很简单,浏览器上会看到一个Hello World!

浏览器端

由于是跨域的,我们需要使用两个域名。上面我们已经有一个了,类似于这个:http://localhost:1661/

接下来,我们将使用IIS构建另一个。

为了简洁起见,假设您已经知道如何在IIS上设置网站。如果你有任何问题,你会在网上得到一堆答案。

首先,我们创建一个新文件夹,并将IIS默认localhost网站的根目录指向这个文件夹。

将文件index.html添加到此文件夹。

内容应该如下所示:

html xmlns=' http://www . w3 . org/1999/XHTML ' head title/title script src=' http :3359 code . jquery.com/jquery-3 . 1 . 1 . min . js '/script/head body script $。get('http://localhost:1661/',{},function(data){ alert(data);},' text ');/script/body/html注意:请求的地址应该是您上一个项目的调试地址。写这篇文章的时候,我的项目的调试地址是http://localhost 33601661/,这个要看你自己的情况。

浏览网站localhost,js会跨域请求另一个域名的地址,会弹出返回值。

当启动ajax请求时,一旦浏览器发现Ajax请求跨域,它会自动添加一些额外的头信息,并将其请求到目标服务器(目标服务器将拥有自己域的域名)。目标服务器将检测该域名是否在允许跨域的域名中,如果是,将返回请求结果,否则将失败。

分组策略和MVC

上面的例子只是一个基本的配置方法。接下来,我们将演示一种更高级的方法。接下来,我们将演示分组策略以及与MVC的集成。在Startup.cs中配置服务

服务。AddCors(options={ options。AddPolicy('AllowSpecificOrigin ',builder={ builder。WithOrigins('http://localhost ',' https://www . Microsoft.com ');});选项。add policy(' allowspecificorigin 1 ',builder={ builder。with origins(' http://localhost :8080 ',' https://www . stack overflow.com ');});});服务。AddMvc();

在配置中

app。UseMvc();完整的代码应该如下所示:

public void ConfigureServices(IServiceCollection services){ services .AddCors(选项={ options .AddPolicy('AllowSpecificOrigin ',builder={ builder .WithOrigins('http://localhost ',' https://www。微软。com’);});});服务addMVc();}公共void Configure(IApplicationBuilder应用程序,IHostingEnvironment env,ILoggerFactory logger factory){ app .UseMvc();}接下来我们来添加控制器

在项目中添加一个目录控制器,并在其中添加一个APIController,命名为HomeAPIController.cs

其中的内容应该是这样:

//[EnableCors(' AllowSpecificOrigin ')][Route(' API/[控制器]')]公共类homeapi控制器:控制器{[EnableCors(' allowspecificicorigin ')][HttpGet]公共字符串Get() { return '此消息来自另一个来源;}[DisableCors][httpset]公共字符串Post() { return '此方法不能跨越原点;} }[EnableCors(' allowspecificicorigin ')]既为在本控制器或行为中应用哪个分组策略。

[DisableCors]则为本控制器或行为不允许跨域资源请求

改造浏览器端超文本标记语言

修改本地主机网站的index.html,内容应为:

html xmlns=' http://www。w3。org/1999/XHTML ' head title/title script src=' http :3359代码。jquery。com/jquery-3。1 .1 .量滴js '/script/head discript $ .get(' http://localhost :1661/API/HomeAPI ',{},function(data){ alert(data);},' text ');/脚本/正文/html调试

F5调试服务端项目,你会看到一个404页面,因为默认路径上没有页面,不用管它,浏览http://localhost,js会得到请求http://localhost :1661/API/HomeAPI,并弹出返回值,而如果你去邮政请求http://localhost :1661/API/HomeAPI,则请求会被拦截。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:谈谈如何在ASP.NET核心区实现CORS跨域是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。