《Asp.Net Core3 + Vue3入坑教程》- 2.配置CORS策略解決跨域問題

簡介

《Asp.Net Core3 + Vue3入坑教程》 此教程適合新手入門或者先後端分離嘗試者。能夠根據圖文一步一步進操做編碼也能夠選擇直接查看源碼。每一篇文章都有對應的源碼javascript

教程後期會將 .Net Core 3升級成 .Net Core 5html

目錄

《Asp.Net Core3 + Vue3入坑教程》系列教程目錄

Asp.Net Core後端項目前端

  1. 後端項目搭建與Swagger配置步驟
  2. (本文)配置CORS策略解決跨域問題
  3. AutoMapper & Restful API & DI
  4. EF Core & Postgresql
  5. (暫未發表敬請期待...).Net Core 3升級成 .Net Core 5
  6. (暫未發表敬請期待...)JWT

Vue3 前端項目vue

暫未發表敬請期待...java

本文簡介

本文爲《Asp.Net Core3 + Vue3入坑教程》系列教程的第二篇 - 跨域問題處理。先後端分離遇到的最多見問題之一就是跨域問題。本文接着上文(後端項目搭建與Swagger配置步驟)繼續爲Asp .Net Core項目解決跨越問題jquery

Simple項目跨域問題處理步驟

新建CRONTest.html用來驗證跨域問題

代碼以下:nginx

注意: url: "https://localhost:44372/api/Values", 端口號要與Simple項目的一致git

<!DOCTYPE html><html>
<head> 
<meta charset="utf-8"> 
<title> CRONTest </title>
<script type="text/javascript" src="https://cdn.staticfile.org/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" >
$.ajax({
  type: "GET",
  url: "https://localhost:44372/api/Values", // 須要保證端口號與Simple項目的一致
  success: function(msg){
     alert( "CRONTest Success: " + msg );
   }
});

</script>
</head>
<body>
<p>CRONTest</p>
</body>
</html>

打開CRONTest.html,並按F12打開瀏覽器開發者工具,咱們能夠看到控制檯報了跨域的錯誤

爲Simple項目增長跨域處理,在ServiceProvider文件夾下新建擴展類CORS.cs

代碼以下:github

注意:目前先容許全部請求,當可以明確前端域名的時候,再改掉WithOrigins方式!!!ajax

using Microsoft.Extensions.DependencyInjection;

namespace Simple_Asp.Net_Core.ServiceProvider
{
   public static class CORS
   {
       public static void AddCORS(this IServiceCollection services)
       {
               services.AddCors(
                  options => options.AddPolicy(
                      "CorsTest",
                       // 目前先容許全部請求,當可以明確前端域名的時候,再改爲WithOrigins方式
                       p => p.AllowAnyOrigin()
                            // 配置前端域名,注意端口號後不要帶/斜杆
                            //p => p.WithOrigins("https://localhost:44372", "https://localhost:44372")
                            .AllowAnyHeader()
                            .AllowAnyMethod()
                            .WithExposedHeaders("Content-Disposition")));
       }
   }
}

配置Starup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Simple_Asp.Net_Core.ServiceProvider;

namespace Simple_Asp.Net_Core
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCORS();
            services.AddMvc();
            services.AddSwagger();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "ApiHelp V1");
                });
            }

            app.UseCors("CorsTest");

            app.UseRouting();
            app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute());
        }
    }
}

再次使用CRONTest.html調用後端接口

此次能成功調用後端接口,解決了跨域問題

CORS跨域問題處理完成!

總結

本文爲Simple項目配置CORS策略來解決跨域問題,這時候前端項目能夠正常請求後端服務。

須要注意目前源碼是容許全部請求,當可以明確前端域名的時候,要改掉WithOrigins方式!保證後端服務的安全!

解決跨域問題有不少種,可使用經過jsonp或者nginx代理等等

GitHub源碼

注意:源碼調試過程當中若是出現xml文件路徑錯誤,須要參照上文(後端項目搭建與Swagger配置步驟)Swagger配置「配置XML 文檔文件」步驟,取消勾選而後再選中 ,將XML路徑設置成與你的電腦路徑匹配!

https://github.com/Impartsoft/Simple_Asp.Net_Core/tree/master/Simple_Asp.Net_Core 2.CORS

參考資料

博客(推薦學習) http://www.javashuo.com/article/p-fcwextbq-ec.html

微軟官方文檔 https://docs.microsoft.com/zh-cn/aspnet/core/?view=aspnetcore-5.0

CORS詳解 http://www.ruanyifeng.com/blog/2016/04/cors.html

CORS詳解 https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

相關文章
相關標籤/搜索