NETCOREAPI 跨域处理

摘要:
ASPNET COREAPI跨域处理AspNetCoreApi跨域处理如果我们处理过MV5跨域问题,这不是一个大问题。(同一来源)当WebFrom前台Ajax调用后台PageLoad页面时,因为它位于同一站点中,所以满足了以上三点,因此不会出现跨域问题。(不同来源)例如,当使用微服务进行开发时,前台和微服务不在同一服务器上。尽管端口相同,IP地址相同,协议不同,但会出现跨域问题。

ASPNETCOREAPI 跨域处理

AspNetCoreApi 跨域处理
如果咱们有处理过MV5 跨域问题这个问题也不大。

(1)为什么会出现跨域问题:
浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功访问资源,原因“同源策略”的存在:
同源指以下几点相同

          (1) IP地址/域名

          (2) 端口号

          (3) 网络协议)

          以上三点相同即为同源,浏览器将不做限制。

    (同源)   WebFrom 前台Ajax调用后台PageLoad页时 因为是在同一站点,以上三点均满足,也就不会出现跨域的问题。

    (不同源) 比如用微服务开发时,前台和微服务没有在同一台服务器上,虽然端口相同IP不同协议也相同,这时就会出现了跨域的问题了。

引用脚本时会有例外:

(2)文章以AspNetCore Api 为例
2.1:首先创建一个CoreAPI的项目(这个就不多说了)

  2.2:确保项目NuGet中引用 AspNetCore.ALL 里面包含 AspNetCore.Cors



              



 如果没有右击项目依赖项代开NuGet管理工具

           如图所示查找:

           





    2.3:在Startup.cs 文件的ConfigureServices方法中注入如下代码:

(1)第一种

services.AddCors(options => options.AddPolicy("Domain",
builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

"http://a.example.com", "http://c.example.com" 代表着允许访问的域,就好像给这个域开放了一个权限,允许访问的权限,可以写多个逗号分隔

        (2)第二种

services.AddCors(options => options.AddPolicy("Domain",
builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
//AllowAnyMethod允许跨域策略允许所有的方法:GET/POST/PUT/DELETE 等方法 如果进行限制需要 AllowAnyMethod("GET","POST") 这样来进行访问方法的限制
//AllowAnyHeader允许任何的Header头部标题 有关头部标题如果不设置就不会进行限制
//AllowAnyOrigin 允许任何来源
//AllowCredentials 设置凭据来源

这里是重点不多说了:F12 查看源 阅读注释就明白了。

 

           在项目中可以写 多个services.AddCors() 需要注意的是 Domain1 的区别 咱们可以针对不同的限制些不同的 限制规则

复制代码
services.AddCors(options => options.AddPolicy("Domain1",
builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain2",
builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain3",
builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain4",
builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
复制代码
为什么做这么多限制呢:其实大家每个请求都包含了很多内容:

                       比如:通过 抓包工具看到的每条请求所包含的请求信息

                         

                      再比如:我们通过HTTP发送请求时进行的设置:下图举例还可以设置更多的设置,这些设置都可以通过

                                    services.AddCors()来进行设置:

                         

                    2.4:在Startup.cs 文件中的Configure()方法中注册我们的   Domain

复制代码
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("Domain1");
app.UseCors("Domain2");
app.UseCors("Domain3");
app.UseCors("Domain4");
}
复制代码

                  上面操作完之后我们就结束了准备任务现在可以进行使用了:使用方法如下:
                    2.5:使用如下:
                   (1)第一种  action

复制代码
[HttpGet("{OrderNO}/{BranchID}")]
//启用跨域
[EnableCors("Domain")]
public Object getMultipleOrderDetail(string OrderNO, int OrderNoType, string BranchID)
{
return vM.getMultipleOrderDetail(OrderNO, OrderNoType, BranchID);
}
复制代码
(2)第二种 控制器

//启用跨域
[EnableCors("Domain")]
[Produces("application/json")]
[Route("api/BorrowOrder/[action]")]
public class SP_PartsBorrowOrderController : Controller
{
2.6 :前台调用代码如下:

                   重点是:这个节点    xhrFields: { withCredentials:true //跨域请求中带cookie },//必须有这项的配置,不然cookie无法发送至服务端

复制代码

复制代码 本文是以 CORS 进行实现

免责声明:文章转载自《NETCOREAPI 跨域处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 注册DLL至GAC 并在添加引用中使用该DLLpython数据可视化案例——力导向图,网络图,关系图(使用pyecharts,networkx,echarts,js)...下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

好用的Linux下PDF编辑批注软件PDF Studio Pro 11

在Windows下,常用foxit phantom,既能查看PDF,又能修改页面,还能各种批注。linux下,Evince查看、文本注释、高亮注释还不错。但是功能就这么多了,要更多的话,修改用pdfedit、pdf mod,加注记用Xournal,合并用pdktk等等。难道没有更强大的了吗?找到PDF Studio Pro,功能都有了,很好用。 来源:...

【UE】常用的UltraEdit使用技巧

Tip 1: Alt+C 列模式可以说最初选择使用这个文本编辑软件,原因很简单,就是因为“她”具有列编辑模式。如果您还不知道什么是列编辑模式的话,我想您应该好好研究一下啦。这是一个超级“赞”的功能。在对大文本进行批量的列编辑时候非她莫属(如果您是Windows平台上另外一个强大的文本编辑软件gVim的使用者除外)。快实验一下这个功能吧。Tip 2:Ctrl...

使用电脑模拟微信内置浏览器

最近在弄微信开发,需要微信请求,其实很好改 只要把请求头改了就好了。 浏览器呢 就使用 chrome我在这使用360极速浏览器了。 首先进入开发者模式(F12或者右键审查元素) 如图: 然后 点击 更多 选 More tools 打开Network conditions 最后设置请求为微信请求: 最后那个请求是自...

更改exe图标

我们在用vs开发winform程序的时候,不管是vb还是c#,时常想让生成的exe有一个漂亮的图标以表明软件的作用。 其实更改生成的exe的图标很方便,用vs就能简单的实现。 下面以C# winform程序为例,当我们完成我们的design后, 右击application(注意不是solution 解决方案), 在第一个选择项“应用程序”中可以选择应用程序...

SVN的配置和使用

1、svn是代替cvs而衍生出来的一种新的版本控制器系统。他的图标是个小龟。2、1)备份数据2)、项目同步 3)、进行版本控制。3、svn版本控制器的原理 项目组成员A上传代码,然后项目组成员B下载下来。然后进行协同开发。4、安装1)、服务器端软件(提示重启必须的不要重启) 2)、客户端软件 3)、中文语言包5、说了怎样去建立版本库,就是怎样去在你的电脑上...

ubuntu 常用命令 及 设置

一、如何打开终端 二、ubun11.10 如何从英文切换到中文 三、如何创建ubuntu新用户? 四、如何查看 使用到 ubuntu版本 五、ubuntu系统下创建软件桌面快捷方式 六、使用 dpkg 安装 deb 包 ================================================= 一、如何打开终端? 这...