设为首页 加入收藏

TOP

asp.net core 系列之允许跨域访问2之测试跨域(Enable Cross-Origin Requests:CORS)(一)
2019-09-17 18:33:19 】 浏览:40
Tags:asp.net core 系列 允许 访问 测试 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/val
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#中简单操作Mysql数据库 下一篇vs实用插件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目