abp vnext 開發快速入門 4 跨域設置


由於項目采用的微服務框架,前端與后端交互難免有跨域的問題。abp vnext實現跨域也很簡單,只需要設置幾處就可以了,這里只講全局的跨域,至於局部的Action如何跨域請自行搜索.netcore 跨域相關的知識。

1、修改appsettings.json 下的App:CorsOrigins節點,把前端的域名加進來。比如

"App": {
    "CorsOrigins": "https://*.Test.com,http://localhost:4200,http://localhost:2213"
  }

2、abp vnext 已經默認跨域的配置代碼如下:

context.Services.AddCors(options =>
            {
                options.AddPolicy(DefaultCorsPolicyName, builder =>
                {
                    builder
                        .WithOrigins(
                            configuration["App:CorsOrigins"]
                                .Split(",", StringSplitOptions.RemoveEmptyEntries)
                                .Select(o => o.RemovePostFix("/"))
                                .ToArray()
                        )
                        .WithAbpExposedHeaders()
                        .SetIsOriginAllowedToAllowWildcardSubdomains()
                        .AllowAnyHeader()
                        .AllowAnyMethod()
                        .AllowCredentials();
                });
            });

這樣調試,前端就可以訪問了。

這樣就完了嗎。還沒說完呢,說一個我遇到的坑,就是我調試時發現前端調用后端登錄接口,后端用調試模式或者用Debug啟動服務都沒問題。但是后端用Release啟動卻發現前端怎么也調用不了。前端錯誤日志提示不允許跨域,我當時就想我明明設置了啊,難道這塊Release與Debug哪里不同的設置還?就搜索全網各種資料都沒有解決。

然后我就冷靜思考下,我用restclient看看是否允許訪問接口。結果發現也不行,這時我就想可能不是跨域問題了,就去看后端日志了,結果發現居然是配置的swagger的問題。默認調試模式生成了xml文檔,但是到了Release下就沒有生成,這時調用接口發生了錯誤。於是把swagger改成只有在調試開發環境下才使用的,這下問題就解決了。這塊沒少費我時間,這里說出來,能給大家減少點時間浪費。

swagger 配置改成這樣

if (env.IsDevelopment())
            {
                app.UseSwagger();
                app.UseSwaggerUI(options =>
                {
                    options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API");
                });
            }

以上就說完了跨域相關的了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM