跨域:指的是瀏覽器不能執行其他網站的腳本 。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制 。
以下幾種情況是造成跨域的原因:
- 域名相同,端口不同
- 域名相同,協議不同(即,一個是 http,一個是 https)
- 訪問其他網站時,一個是域名,一個是對應的 IP地址(PS:http://www.a.com------http://192.168.1.1)
- 主域名相同,子域名不同
- 兩個完全不相同的域名

文章插圖

文章插圖
凡是這兩種報錯都屬于跨域,一般來說,前端解決跨域比較復雜,所以一般后端解決跨域,因為過程相對簡單 。
這里以一個 Net Core 3.x WebApi 的框架的實例來解決這個問題
一、首先 WebApi 需要配置相對應的代碼
這是官方的方案:https://learn.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-3.1
首先在 core 3.x 的 Startup.cs 文件里有 ConfigureServices 方法將服務添加到容器,將跨域的配置添加即可
跨域有兩種配置方法,一種是允許所有域名,一種是配置部分域名通信,配置方法略有不同參考代碼如下:
1public void ConfigureServices(IServiceCollection services) 2{ 3#region 解決跨域 4//“Cors”表示策略名稱,可以隨便起;可以添加多條策略 。5//AllowAnyOrigin表示允許任何域;AllowAnyMethod表示允許任何方法;AllowAnyHeader表示允許任何消息頭 。6//如果是允許指定的域、方法、消息頭需要使用WithOrigins、WithMethods、WithHeaders方法 。7services.AddCors(options => 8{ 9options.AddPolicy("Cors", builder =>10{11builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();12});13});1415////允許一個或多個來源可以跨域16//services.AddCors(options =>17//{18//options.AddPolicy("CustomCors", policy =>19//{20//// 設定允許跨域的來源,有多個可以用','隔開21//policy.WithOrigins("http://localhost:9000")22//.AllowAnyHeader()23//.AllowAnyMethod()24//.AllowCredentials();25//});26//});27#endregion2829services.AddControllers();30}【解決 net core 3.x 跨域問題】
在 ConfigureServices 配置后,只需要在 HTTP請求管道 中調用即可
添加一句代碼即可,但是名稱一定要與服務中定義的名稱一致
添加時需要注意,對
UseCors 的調用必須放在 UseRouting 之后,但在 UseAuthorization 之前 。1public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 2{ 3 4 5if (env.IsDevelopment()) 6{ 7app.UseDeveloperExceptionPage(); 8} 910//添加日志中間件11app.UseLog();1213//全局捕捉異常14app.UseExceptionMiddleware();1516app.UseHttpsRedirection();17app.UseRouting();1819//跨域20app.UseCors("Cors");21//app.UseCors("CustomCors");2223//用戶認證24app.UseAuthentication();25app.UseAuthorization();2627// 添加Swagger有關中間件28app.UseSwagger();29app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Demo v1"); });3031app.UseEndpoints(endpoints =>32{33endpoints.MapControllers();34});35}那么到這里,你是不是覺得已經配置完成,就可以使用 ajax 直接訪問接口不會報錯了 。
我這里的做法時,將 WebApi 的代碼發布到本地的 IIS 中進行測試的,但結果是,這樣配置后,依然無法解決跨域的問題,后來查閱發現,這個配置只完成了一半 。
二、IIS 服務器配置
如果是本地訪問 WebApi 這種方式是沒有問題的,發布線上這種方式就不可以了,所以還要完成 IIS 服務器的配置
經驗總結擴展閱讀
- 京東云開發者|mysql基于binlake同步ES積壓解決方案
- Jmeter——請求響應內容亂碼解決辦法
- 關于ASP.NET Core WebSocket實現集群的思考
- .NET周報【11月第1期 2022-11-07】
- 永久解決Ubuntu下adb權限問題
- kubernetes之kubectl與YAML詳解1
- 電腦內存不足解決辦法(打游戲內存占用90%)
- .NET性能優化-是時候換個序列化協議了
- 基于 .NET 7 的 QUIC 實現 Echo 服務
- 《ASP.NET Core技術內幕與項目實戰》精簡集-目錄
