热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

请求方法:

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";
}

class="text-center">

class="display-4">欢迎学习MiniAPI

本例是跨域知识的分享。


"test2-get">

"test2-post">

"test2-delete">

"test2-put">


@section Scripts{

}

运行结果,delete被拒了

 

 

 

请求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";
}

class="text-center">

class="display-4">欢迎学习MiniAPI

本例是跨域知识的分享。


"test3-get">

"test3-post">

"test3-delete">

"test3-put">


@section Scripts{

}

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

 

 

 请求凭据


凭据需要在 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";
}

class="text-center">

class="display-4">欢迎学习MiniAPI

本例是跨域知识的分享。


"test4-get">

"test4-post">

"test4-delete">

"test4-put">


@section Scripts{

}

运行结果:

 

 

 如果除掉api项目中的凭据

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

运行结果:

  想要更快更方便的了解相关知识,可以关注微信公众号 

 

 



****欢迎关注我的asp.net core系统课程****







《asp.net core精要讲解》 https://ke.qq.com/course/265696







《asp.net core 3.0》 https://ke.qq.com/course/437517







《asp.net core项目实战》 https://ke.qq.com/course/291868







《基于.net core微服务》 https://ke.qq.com/course/299524



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何使用PHP检测AJAX请求,通过分析预定义服务器变量来判断请求是否来自XMLHttpRequest。此方法简单实用,适用于各种Web开发场景。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
author-avatar
ccer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有