ASP.NET Core 6 CORS跨域资源共享N种用法如何实现?

摘要:同源策略是所有浏览器都必须遵循的一项安全原则,它的存在决定了浏览器在默认情况下无法对跨域请求的资源做进一步处理。为了实现跨域资源的共享,W3C制定了CORS规范。ASP.NET利用CorsMiddleware中间件提供了针对CORS规范的实
同源策略是所有浏览器都必须遵循的一项安全原则,它的存在决定了浏览器在默认情况下无法对跨域请求的资源做进一步处理。为了实现跨域资源的共享,W3C制定了CORS规范。ASP.NET利用CorsMiddleware中间件提供了针对CORS规范的实现。(本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》) [S2901]跨域调用API(源代码) [S2902]显式指定授权Origin列表(源代码) [S2903]手工检验指定Origin是否的权限(源代码) [S2904]基于策略的资源授权(匿名策略)(源代码) [S2905]基于策略的资源授权(具名策略)(源代码) [S2906]将CORS规则应用到路由终结点上(代码编程形式)(源代码) [S2907]将CORS规则应用到路由终结点上(特性标注形式)(源代码) [S2901]跨域调用API为了方便在本机环境下模拟跨域API调用,我们通过修改Host文件将本地IP映射为多个不同的域名。我们以管理员身份打开文件“%windir%\System32\drivers\etc\hosts”,并以如下所示的方式添加了针对四个域名的映射。 127.0.0.1 www.foo.com 127.0.0.1 www.bar.com 127.0.0.1 www.baz.com 127.0.0.1 www.qux.com 我们的演示程序由图1所示的两个ASP.NET程序构成。我们将API定义在Api项目中,App是一个JavaScript应用程序,它会在浏览器环境下以跨域请求的方式调用承载于Api应用中的API。 图1 演示实例解决方案结构 如下所示的Api程序中定义了表示联系人的Contact记录类型。我们注册了针对路径“/contacts”的路由使之以JSON的形式返回一组联系人列表。在调用Application对象的Run方法启动时,我们显式指定了监听地址“http://0.0.0.0:8080”。 var app = Application.Create(); app.MapGet("/contacts", GetContacts); app.Run(url:"http://0.0.0.0:8080"); static IResult GetContacts() { var contacts = new Contact[] { new Contact("张三", "123", "zhangsan@gmail.com"), new Contact("李四","456", "lisi@gmail.com"), new Contact("王五", "789", "wangwu@gmail.com") }; return Results.Json(contacts); } public readonly record struct Contact(string Name,string PhoneNo ,string EmailAddress); 下面的代码片段展示了App应用程序的完整定义。我们通过注册针对根路径的路由使之现一个包含联系人列表的Web页面,我们在该页面中采用jQuery以AJAX的方式调用上面这个API获取呈现的联系人列表。我们将AJAX请求的目标地址设置为“http://www.qux.com:8080/contacts”。在AJAX请求的回调操作中,可以将返回的联系人以无序列表的形式呈现出来。
阅读全文