日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET 6新特性试用 | 无需配置开发人员异常页

發布時間:2023/12/4 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 6新特性试用 | 无需配置开发人员异常页 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在.NET 6之前,我們需要在“Startup.cs”文件中手工配置開發人員異常頁:

if?(env.IsDevelopment()) {app.UseDeveloperExceptionPage();app.UseSwagger();app.UseSwaggerUI(c?=>?c.SwaggerEndpoint("/swagger/v1/swagger.json",?"WebApplication5?v1")); }

如果當前環境變量ASPNETCORE_ENVIRONMENT的值是“Development”,將顯示未經處理的請求異常的詳細信息:

在.NET 6中,我們發現,無需顯式調用UseDeveloperExceptionPage,開發人員異常頁同樣起作用。

//?Configure?the?HTTP?request?pipeline. if?(app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }

為什么呢?

原理探究

在https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs中,我們找到如下代碼:

private?void?ConfigureApplication(WebHostBuilderContext?context,?IApplicationBuilder?app) {......if?(context.HostingEnvironment.IsDevelopment()){app.UseDeveloperExceptionPage();}...... }internal?WebApplicationBuilder(WebApplicationOptions?options,?Action<IHostBuilder>??configureDefaults?=?null) {......_bootstrapHostBuilder.ConfigureWebHostDefaults(webHostBuilder?=>{//?Runs?inline.webHostBuilder.Configure(ConfigureApplication);//?Attempt?to?set?the?application?name?from?optionsoptions.ApplyApplicationName(webHostBuilder);});...... }

原來是在構造函數進行了默認處理,也就是在API實現的第一句代碼中執行的;

var?builder?=?WebApplication.CreateBuilder(args);//?Microsoft.AspNetCore.Builder.WebApplication public?static?WebApplicationBuilder?CreateBuilder(string[]?args) {return?new?WebApplicationBuilder(new?WebApplicationOptions{Args?=?args}); }

那.NET 6還幫我們默認做了哪些事呢?

其他默認操作

繼續查看ConfigureApplication實現,可以發現.NET 6還進行了其他默認處理,比如:

  • UseRouting

//?If?this?is?set,?someone?called?UseRouting()?when?a?global?route?builder?was?already?set if?(!_builtApplication.Properties.TryGetValue(EndpointRouteBuilderKey,?out?var?localRouteBuilder)) {app.UseRouting(); } else {//?UseEndpoints?will?be?looking?for?the?RouteBuilder?so?make?sure?it's?setapp.Properties[EndpointRouteBuilderKey]?=?localRouteBuilder; }

而在.NET 5中必須手工配置,否則報錯:

  • UseEndpoints

if?(_builtApplication.DataSources.Count?>?0) {//?We?don't?know?if?user?code?called?UseEndpoints(),?so?we?will?call?it?just?in?case,?UseEndpoints()?will?ignore?duplicate?DataSourcesapp.UseEndpoints(_?=>?{?}); }

而在.NET 5中必須在UseEndpoints方法中才能執行MapXXX方法:

app.UseEndpoints(endpoints?=> {endpoints.MapGet("/",?async?context?=>{await?context.Response.WriteAsync("Hello?My?IO!");}); });

結論

正是因為.NET 6內部幫我們做了大量工作,才使得實現最小Web API成為可能:

var?builder?=?WebApplication.CreateBuilder(args); var?app?=?builder.Build();app.MapGet("/",?()?=>?"Hello?World!");app.Run();

減少初始代碼量,這對新手入門無疑是更友好的!

如果你覺得這篇文章對你有所啟發,請幫忙點個或者在看

總結

以上是生活随笔為你收集整理的.NET 6新特性试用 | 无需配置开发人员异常页的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。