.NET6之MiniAPI(十五):跨域CORS(下)

前一篇的跨域请求的方式是松宽的方式,毕竟跨域有安全风险,应尽量少的允许访问必要资源,本篇分别从请求方法,请求头和请求凭据方面了解跨域设置。

请求方法:

api项目,get,post是默认访问,这里只设置了PUT允许访问

using Microsoft.AspNetCore.Cors;var builder = WebApplication.CreateBuilder(args);builder.Services.AddCors(options =>
{options.AddPolicy(name: "Policy2",builder =>{builder.WithOrigins("http://localhost:5280").WithMethods("PUT");});
});
var app = builder.Build();
//注意,这里是没有策略名称的
app.UseCors();
app.MapGet("/test2", [EnableCors("Policy2")] () => "get的结果");
app.MapPost("/test2", [EnableCors("Policy2")] () => "post的结果");
app.MapDelete("/test2", [EnableCors("Policy2")] () => "delete的结果");
app.MapPut("/test2", [EnableCors("Policy2")] () => "put的结果");
app.Map("/test2", [EnableCors("Policy2")] () => "map全部");
app.Run();

页面项目:

@page
@model IndexModel
@{ViewData["Title"] = "Home page";
}
<div class="text-center"><h1 class="display-4">欢迎学习MiniAPI</h1><p>本例是跨域知识的分享。</p>
</div>
<p id="test2-get"></p>
<p id="test2-post"></p>
<p id="test2-delete"></p>
<p id="test2-put"></p>
@section Scripts{
<script>$(function(){$.ajax({url: 'http://localhost:5001/test2',type: 'GET',}).done(function( data, textStatus, jqXHR ) {$("#test2-get").html("test2 get:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test2-get").html("test2 get:"+textStatus)});$.ajax({url: 'http://localhost:5001/test2',type: 'POST',}).done(function( data, textStatus, jqXHR ) {$("#test2-post").html("test2:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test2-post").html("test2:"+textStatus)});$.ajax({url: 'http://localhost:5001/test2',type: 'DELETE',}).done(function( data, textStatus, jqXHR ) {$("#test2-delete").html("test2 delete:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test2-delete").html("test2 detele:"+textStatus)});$.ajax({url: 'http://localhost:5001/test2',type: 'PUT',}).done(function( data, textStatus, jqXHR ) {$("#test2-put").html("test2 put:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test2-put").html("test2 put:"+textStatus)});});
</script>
}

运行结果,delete被拒了

c6ec98be6addecba9a2bfe0d4e3b63a4.png

请求Header

api项目,设置是所有请求方法通过

using Microsoft.AspNetCore.Cors;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{options.AddPolicy(name: "Policy3",builder =>{builder.WithOrigins("http://localhost:5280").WithHeaders("x-cors-header").AllowAnyMethod();});   
});var app = builder.Build();
app.UseCors();
app.MapGet("/test3", [EnableCors("Policy3")] () => "get的结果");
app.MapPost("/test3", [EnableCors("Policy3")] () => "post的结果");
app.MapDelete("/test3", [EnableCors("Policy3")] () => "delete的结果");
app.MapPut("/test3", [EnableCors("Policy3")] () => "put的结果");
app.Map("/test3", [EnableCors("Policy3")] () => "map全部");
app.Run();

页面项目

@page
@model IndexModel
@{ViewData["Title"] = "Home page";
}
<div class="text-center"><h1 class="display-4">欢迎学习MiniAPI</h1><p>本例是跨域知识的分享。</p>
</div>
<p id="test3-get"></p>
<p id="test3-post"></p>
<p id="test3-delete"></p>
<p id="test3-put"></p>
@section Scripts{
<script>$(function(){$.ajax({url: 'http://localhost:5001/test3',type: 'GET',headers: {"x-cors-header":"gsw"}}).done(function( data, textStatus, jqXHR ) {$("#test3-get").html("test3 get:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test3-get").html("test3 get:"+textStatus)});$.ajax({url: 'http://localhost:5001/test3',type: 'POST',headers: {"x-cors-header":"gsw"}}).done(function( data, textStatus, jqXHR ) {$("#test3-post").html("test3 post:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test3-post").html("test3 post:"+textStatus)});$.ajax({url: 'http://localhost:5001/test3',type: 'PUT',headers: {"x-cors-header":"gsw"}}).done(function( data, textStatus, jqXHR ) {$("#test3-put").html("test3 put:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test3-put").html("test3 put:"+textStatus)});$.ajax({url: 'http://localhost:5001/test3',type: 'DELETE',headers: {"x-cors-header":"gsw",   "x-key":"gsw",                  }}).done(function( data, textStatus, jqXHR ) {$("#test3-delete").html("test3 delete:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test3-delete").html("test3 delete:"+textStatus)});                    });
</script>
}

运行结果,delete失败了,因为在delete请求中,夹带了x-key的header,所以没有通过

e7bb65a1cca962cfa136898508b7fe68.png

请求凭据

凭据需要在 CORS 请求中进行特殊处理。 默认情况下,浏览器不会使用跨域请求发送凭据。 凭据包括 cookie s 和 HTTP 身份验证方案。 若要使用跨域请求发送凭据,客户端必须设置 XMLHttpRequest.withCredentials 为 true

api项目

using Microsoft.AspNetCore.Cors;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{  options.AddPolicy(name: "Policy4",builder =>{builder.WithOrigins("http://localhost:5280").AllowCredentials().AllowAnyMethod();});
});
var app = builder.Build();
app.UseCors();
app.MapGet("/test4", [EnableCors("Policy4")] () => "get的结果");
app.MapPost("/test4", [EnableCors("Policy4")] () => "post的结果");
app.MapDelete("/test4", [EnableCors("Policy4")] () => "delete的结果");
app.MapPut("/test4", [EnableCors("Policy4")] () => "put的结果");
app.Map("/test4", [EnableCors("Policy4")] () => "map全部");
app.Run();

页面项目:

@page
@model IndexModel
@{ViewData["Title"] = "Home page";
}
<div class="text-center"><h1 class="display-4">欢迎学习MiniAPI</h1><p>本例是跨域知识的分享。</p>
</div>
<p id="test4-get"></p>
<p id="test4-post"></p>
<p id="test4-delete"></p>
<p id="test4-put"></p>
@section Scripts{
<script>$(function(){$.ajax({url: 'http://localhost:5001/test4',type: 'GET',xhrFields: {withCredentials: true}}).done(function( data, textStatus, jqXHR ) {$("#test4-get").html("test4 get:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test4-get").html("test4 get:"+textStatus)});$.ajax({url: 'http://localhost:5001/test4',type: 'POST',xhrFields: {withCredentials: true}}).done(function( data, textStatus, jqXHR ) {$("#test4-post").html("test4 post:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test4-post").html("test4 post:"+textStatus)});$.ajax({url: 'http://localhost:5001/test4',type: 'PUT',xhrFields: {withCredentials: true}}).done(function( data, textStatus, jqXHR ) {$("#test4-put").html("test4 put:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test4-put").html("test4 put:"+textStatus)});$.ajax({url: 'http://localhost:5001/test4',type: 'DELETE',xhrFields: {withCredentials: true}}).done(function( data, textStatus, jqXHR ) {$("#test4-delete").html("test4 delete:"+data)}).fail(function( jqXHR, textStatus, errorThrown) {$("#test4-delete").html("test4 delete:"+textStatus)});});
</script>
}

运行结果:

24cdb84f7814be6b32d86487b030eba1.png

如果除掉api项目中的凭据

options.AddPolicy(name: "Policy4",builder =>{builder.WithOrigins("http://localhost:5280")               .AllowAnyMethod();});

运行结果:

79c6cf7c4a6ee38cb74436795d339190.png

deb951bce54d6e237bf7f896f104e60a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏上线... 记录下...

转载于:https://www.cnblogs.com/porter/p/6339792.html

Beetlex服务网关1.8发布

在新的版本中网关添加了不少功能&#xff0c;分别有流量控制包括&#xff1a;会话、IP、域名和Url等流量控制配置&#xff1b;在插件上添加了Redis读取和ElasticSearch文档搜索功能。流量控制在新版本中网关添加了流量控制功能&#xff0c;通过这一功能可以控制会话、IP、域名和…

HDU 3487 Play with Chain | Splay

Play with Chain Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) 【Problem Description】YaoYao is fond of playing his chains. He has a chain containing n diamonds on it. Diamonds are numbered from 1 to n. At first, the d…

WIN32程序结构

windows程序基于消息驱动系统&#xff0c;用户的所有行为和事件都被windows转成消息。windows内部对消息的处理:消息生命周期:1.消息产生:windows监控所有具体输入事件硬件设备。当系统收到设备输入事件时。windows将对应事件转成消息。2.消息投递:每个消息都有一个目标窗体接收…

zsh

2019独角兽企业重金招聘Python工程师标准>>> 1. MAC安装zsh后,部分bash 指令失效conda, list, pip, list失效&#xff0c;怎么解决&#xff1f; step1&#xff1a;vim ~/.bash_profile 记录Anaconda的路径地址: export PATH"/Users/XXX/anaconda/bin:$PAT…

导出jar插件_Fluttify输出的Flutter插件工程详解

系列文章&#xff1a;yohom&#xff1a;Fluttify输出的Flutter插件工程详解​zhuanlan.zhihu.comyohom&#xff1a;开发Flutter插件必备原生SDK->Dart接口生成引擎Fluttify介绍​zhuanlan.zhihu.comyohom&#xff1a;如何使用Fluttify开发一个新的Flutter插件​zhuanlan.zhi…

[免费下载应用]iNeuKernel.Ocr 图像数据识别与采集原理和产品化应用

目 录1..... 应用概述... 22..... 免费下载试用... 23..... 视频介绍... 24..... iNeuLink.Ocr图像数据采集应用... 25..... 数据上传到iNeuOS工业互联网操作系统... 46..... Ocr基本概念... 71. 应用概述在工业、军工或航天等领域&#xff0c;有些设备及软件系统比较陈…

hdu 1848(Fibonacci again and again)(SG博弈)

Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8380 Accepted Submission(s): 3462 Problem Description任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生&#xff…

linux c之gcc编译出现error:lvalue required as unary ‘‘ operand解决办法

1、问题 今天搞epoll实现io复用的时候gcc编译出现这个错误lvalue required as unary & operand&#xff0c;如下图 2、解决办法 accept函数参数如下 int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen); 在第三个参数为了少些代码我是这样写成这样&size…

生成arff文件,csv转为arff

一、什么是arff格式文件 1、arff是Attribute-Relation File Format缩写&#xff0c;从英文字面也能大概看出什么意思。它是weka数据挖掘开源程序使用的一种文件模式。由于weka是个很出色的数据挖掘开源项目&#xff0c;所以使用的比较广&#xff0c;这也无形中推广了它的数据存…

C#中的类

前言今天咱们简单复习下C#中类的相关知识。在刚开始学习编程的时候&#xff0c;都是从面向过程的C语言开始的&#xff0c;它有个特征就是有其执行顺序&#xff0c;先干这&#xff0c;再干那&#xff0c;很直接&#xff0c;也很好理解。但现在学习C#或者JAVA等面向对象的语言&am…

Stopwatch类学习

1、概述:给一条大MSDN的链接关于Stopwatch类最详细的教程 ,然后看着教程自己手动敲一边,加深映象,好记性不如烂键盘,哈哈,开个玩笑&#xff01; 2、类位置:这个类在哪里,这个是重点,虽然C#IDE很强大,但是我们还是得简单的了解下。通过一段代码来说明: using System; namespace …

看看这套WPF开源基础控件库:WPFDevelopers

此项目包含了 微信公众号 《 WPF开发者》 日常开发分享&#xff0c;欢迎Star。运行环境 Visual Studio 2019&#xff0c;dotNet Framework 4.0 SDK欢迎关注微信公众号支持贡献者DrawPrize&#xff08;WPF 实现大转盘抽奖&#xff09;GIF帧数太多&#xff0c;无法上传&#xff0…

如何将EDM营销与多渠道推广方式相结合

目前&#xff0c;消费者每天都会从各种渠道收到信息&#xff0c;如果仅用单一渠道的营销会影响整体营销。多渠道推广方式是所有渠道都要兼顾到从而接触用户&#xff0c;让他接收到他想接收的信息&#xff0c;多渠道的过程中邮件还是非常好的营销方式。你要想让你的EDM营销获得成…

Cannot resolve the collation conflict between SQL_Latin1_General_CP1_CI_AS and Latin1_General_100...

ErrorMessage Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_100_CI_AS" in the equal to operation. 查看SQL Server的Collation SELECT SERVERPROPERTY (Collation) Solution 1. 在安装SQL Server…

语言 ota_荣威RX5 PLUS使用最新的家族设计语言,给人更年轻时尚的感觉

如果要用一个词来形容 荣威RX5 PLUS&#xff0c;我第一个能想到的便是“诚意”。斑马最新VENUS系统、米其林PS4轮胎、双层隔音玻璃、终身原厂质保、终身免费基础保养……从产品到政策&#xff0c;荣威RX5 PLUS的方方面面都显示出了上汽荣威的诚意。从上市到现在&#xff0c;荣威…

C# 制作指示灯(经典)

群友提问&#xff1a;C#中的指示灯怎么做&#xff0c;改变状态有什么好的方法吗&#xff1f;制作指示灯的方法有很多中&#xff1a;比如&#xff1a;通过GDI绘制自定义LED指示灯控件&#xff1b;调用现成的第三方控件库&#xff1b;采用label标签&#xff0c;通过改变背景色实现…

结合ChatGPT和MINDSHOW自动生成PPT

总结/朱季谦 一、首先&#xff0c;通过chatGPT说明你的需求&#xff0c;学会提问是Ai时代最关键的一步。你需要提供一些关键信息&#xff0c;如果没有关键信息&#xff0c;就按照大纲方式让它设计&#xff0c;例如&#xff0c;我让它帮我写一份《2023年年中述职报告》的模版—…

华为怎么删除自带的音乐_原来华为手机相册隐藏剪辑功能!按下这个开关,还能制作音乐相册...

华为手机相册你肯定在用&#xff0c;但除了最近删除、智能搜索之外&#xff0c;你还知道手机相册的其他功能吗&#xff1f;这里就分享一个&#xff0c;相册中隐藏的实用剪辑功能&#xff0c;按下这个开关&#xff0c;还能把照片制作成音乐相册。创作开关首先将华为手机上的相册…

使用 Dapr 缩短软件开发周期,提高生产效率

Microsoft DevOps 文档里的文章&#xff08;https://docs.microsoft.com/zh-cn/azure/devops/report/dashboards/cycle-time-and-lead-time?viewazure-devops&#xff09;中的这张图片在给我们介绍了 什么是周期时间 以及它如何影响我的项目流时非常有影响力。第一次输入 &quo…