asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)

这一节主要讲如何测试跨域问题

你可以直接在官网下载示例代码,也可以自己写,我这里直接使用官网样例进行演示

样例代码下载:

Cors

一.提供服务方,这里使用的是API

1.创建一个API项目。或者直接下载样例代码

2.像之前讲的那样设置允许CORS,例如:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    // Shows UseCors with CorsPolicyBuilder.
    app.UseCors(builder =>
    {
        builder.WithOrigins("http://example.com",
                            "http://www.contoso.com",
                            "https://localhost:44375",
                            "https://localhost:5001");
    });

    app.UseHttpsRedirection();
    app.UseMvc();
}

使用的时候,注意 WithOrigins("https://localhost:<port>"); 这个地址替换为客户端地址(即调用方:这里指部分Razor代码)

二.客户端,这里指调用方(页面中js调用),这里指Razor部分的代码

1.创建一个web 应用(Razor pages 或者 mvc )。样例用的Razor Pages 。

2.在index.cshtml中增加如下代码

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">CORS Test</h1>
</div>

<div>
    <input type="button" value="Test"
           onclick="requestVal(‘https://<web app>.azurewebsites.net/api/values‘)" />
    <span id=‘result‘></span>
</div>

<script>
    function requestVal(uri) {
        const resultSpan = document.getElementById(‘result‘);

        fetch(uri)
            .then(response => response.json())
            .then(data => resultSpan.innerText = data)
            .catch(error => resultSpan.innerText = ‘See F12 Console for error‘);
    }
</script>


这里再多说一下,我的操作流程

首先,下载样例代码;

然后,在同一个解决方案中,导入Cors样例代码,如图

然后,可以先把解决方案设置为多个启动项目,启动,看下ClientApp的URL和WebAPI的URL

得到,我的url 分别如下:

ClientApp
http://localhost:65317/

WebApi
http://localhost:65328/

先停止运行,分别设置api的withOrigin和client页面中的地址,代码如下:

WebAPI中的 StartupTest (这个跟Program使用的StartUp文件有关,样例代码中使用的StartUpTest)

// Shows UseCors with CorsPolicyBuilder.
            app.UseCors(builder =>
            {
                builder.WithOrigins("http://example.com",
                                    "http://www.contoso.com",
                                    "https://localhost:44375",
                                    "http://localhost:65317");
            });

ClientApp中的Index.cshtml文件代码如下:

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">CORS Test</h1>
</div>

<div>
    <h3>Test results:</h3>
    <span id=‘result‘></span>
</div>

<div>
    <input type="button" value="Test Widget 1"
           onclick="requestVal(‘https://webapi123.azurewebsites.net/api/widget/1‘)" />
    <input type="button" value="Test All Widgets"
           onclick="requestJson(‘https://webapi123.azurewebsites.net/api/widget‘)" />
    <input type="button" value="Test All Val"
           onclick="requestJson(‘https://webapi123.azurewebsites.net/api/values‘)" />
    <input type="button" value="Test Val 1"
           onclick="requestVal2(‘https://webapi123.azurewebsites.net/api/values/1‘)" />
    <input type="button" value="Test Val 2"
           onclick="requestVal2(‘http://localhost:65328/api/values‘)" />
    <input type="button" value="Test Val 3"
           onclick="requestJson(‘http://localhost:65328/api/values‘)" />
</div>

<script>
    function requestJson(uri) {
        const resultSpan = document.getElementById(‘result‘);

        fetch(uri)
            .then(response => response.json())
            .then(data => resultSpan.innerText = data)
            .catch(error => resultSpan.innerText = ‘See F12 Console for error‘);
    }
</script>

<script>
    function requestVal2(uri) {
        const resultSpan = document.getElementById(‘result‘);

        fetch(uri)
            .then(response => response.text())
            .then(data => resultSpan.innerText = data)
            .catch(error => resultSpan.innerText = ‘See F12 Console for error‘);
    }
</script>

再运行,测试

发现当WebApi中的 WithOrigins 设置正确时,不会报跨域问题,

否则,报跨域问题。

跨域错误截图

如有疑问,可以参考网址:

https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2#cors-policy-options

原文地址:https://www.cnblogs.com/Vincent-yuan/p/10801517.html

时间: 2024-11-07 13:12:19

asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)的相关文章

asp.net core系列 64 结合eShopOnWeb全面认识领域模型架构

原文:asp.net core系列 64 结合eShopOnWeb全面认识领域模型架构 一.项目分析 在上篇中介绍了什么是"干净架构",DDD符合了这种干净架构的特点,重点描述了DDD架构遵循的依赖倒置原则,使软件达到了低藕合.eShopOnWeb项目是学习DDD领域模型架构的一个很好案例,本篇继续分析该项目各层的职责功能,主要掌握ApplicationCore领域层内部的术语.成员职责. 1. web层介绍 eShopOnWeb项目与Equinox项目,双方在表现层方面对比,没有太大

ASP.NET CORE系列【五】webapi整理以及RESTful风格化

原文:ASP.NET CORE系列[五]webapi整理以及RESTful风格化 介绍 什么是RESTful?  这里不多做赘述,详情请百度! 哈哈,本来还想巴拉巴拉介绍一些webapi, RESTful的, 还是算了,咱们直接上干货!(原因是懒!哈哈) 使用 以前使用过mvc的人对webapi 应该都很熟悉,先看一段熟悉的代码 大伙发现了什么没?跟以往mvc大多数相同,但有些地方不同 ,我们来一起看看有何区别 1.首先SysUsersController上面有一段代码 [Produces("a

ASP.NET CORE系列【一】搭建ASP.NET CORE项目

原文:ASP.NET CORE系列[一]搭建ASP.NET CORE项目 为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug太多,现在2.0也发布很久了,决定研究一下. ASP.NET Core官方文档https://docs.microsoft.com/en-us/aspnet/core/getting-started ASP.NET Core 具有如下优点: 生成 Web UI 和 Web API 的统一场景. 集成

ASP.NET CORE系列【二】使用Entity Framework Core进行增删改查

原文:ASP.NET CORE系列[二]使用Entity Framework Core进行增删改查 介绍 EntityFrameworkCore EF core 是一个轻量级的,可扩展的EF的跨平台版本.对于EF而言 EF core 包含许多提升和新特性,同时 EF core 是一个全新的代码库,并不如 EF6 那么成熟和稳定.EF core 保持了和EF相似的开发体验,大多数顶级API都被保留了下来,所以,如果你用过EF6,那么上手EF core你会觉得非常轻松和熟悉,EF core 构建在一

1.1专题介绍「深入浅出ASP.NET Core系列」

大家好,我是架构师张飞洪,专注于.NET平台十年有余. 工作之余喜欢阅读和写作,学习的内容包括数据结构/算法.网络技术.Linux系统原理.数据库技术原理,设计模式.前沿架构.微服务.容器技术等等…… 喜欢但不限于,Java.C.C++.Python.Javascript……Wait……不装了,因为我也还在学习的路上,愿你我一起终生学习. 定调 这里先给整个文章的系列定一个调调,起名深入浅出ASP.NET Core系列.深入的目的是希望能了解底层机制,浅出是为了学习能不让自己那么枯燥,给自己定个

目录导航「深入浅出ASP.NET Core系列」

希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 入门篇 1.1课程介绍「深入浅出ASP.NET Core系列」 1.2环境安装「深入浅出ASP.NET Core系列」 1.3创建项目「深入浅出ASP.NET Core系列」 1.4部署到IIS「深入浅出ASP.NET Core系列」 1.5准备CentOS和Nginx环境「深入浅出ASP.NET Core系列」 1.6部署到CentOS「深入浅出ASP.NET Core系列」 2.1命令行和JSON的配置「深

asp.net core 系列 14 错误处理

一.概述 本文介绍处理 ASP.NET Core 应用中常见错误的一些方法.主要是关于:开发环境异常页:非开发环境配置自定义异常处理页:配置状态代码页(没有正文响应,http状态400~599的). 1.1 开发环境异常页 要将应用配置为显示有关异常的详细信息的页面,请使用开发环境异常页.要环境设置为 Development,具体查看:asp.net core系列9环境.下面向 Startup.Configure 方法添加代码行: if (env.IsDevelopment()) { //注意:

asp.net core 系列 15 中间件

原文:asp.net core 系列 15 中间件 一.概述 中间件(也叫中间件组件)是一种装配到应用管道以处理请求和响应的软件. 每个组件:(1)选择是否将请求传递到管道中的下一个组件;(2)可以在管道中的下一个组件之前和之后执行工作. 请求委托用于生成请求管道. 请求委托会处理每个 HTTP 请求.使用以下方法配置请求委托:Run,  Map, Use扩展方法.可以将单个请求委托作为匿名方法(称为内联中间件in-line middleware) 或者可以在可重用类中定义.这些可重用的类和内联

asp.net core 系列 16 Web主机 IWebHostBuilder

原文:asp.net core 系列 16 Web主机 IWebHostBuilder 一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适用于托管 Web 应用:通用主机(ASP.NET Core 2.1 或更高版本)是适用于托管非 Web 应用:在未来的版本中,通用主机将适用于托管任何类型的应用,包括 Web 应用. 通用主机最终将取代 Web