.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”,将显示未经处理的请求异常的详细信息:

6a9371594c7a966775122eb7ee5d1f46.png

在.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中必须手工配置,否则报错:

73e1d44075c99eca49edbae754495ca5.png

  • 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();

减少初始代码量,这对新手入门无疑是更友好的!

如果你觉得这篇文章对你有所启发,请帮忙点个或者在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5中表格如何等分,纯css3饼图五等分

先看效果图&#xff1a;HTML代码如下&#xff1a;pie良好优秀未提交需努力加油98%得分率css代码如下&#xff1a;.pinOfStudent{background-color: #ffffff;width: 100%;position: relative;}#tipZone{position:relative;left:0;right:0;top: 1em;width:12.5em;height:12.5em;m…

Android之开源框架NineOldAndroids动画库

1.介绍 Android3.0推出了全新的AnimationAPI&#xff0c;使用起来很方便&#xff0c;但是不能在3.0以下版本使用&#xff0c;NineOldAndroids是一个可以在任意Android版本上使用的AnimationAPI&#xff0c;API和Android3.0中的类似。 2.常用类 ObjectAnimator ValueAnimator A…

现在竟然还有补丝袜的?

1 看到柿子树千万不要踢&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 原来上床下桌还能这么简陋&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 你总是心太远心太远&#xff08;via.炕上的卡夫卡&#xff09;▼4 这个岗位的上一位同事离职原因▼5 …

微服务组件记事本:Skywalking的ES索引 · 收藏篇

&#xff08;2021年倒计时33天&#xff09;书接上文&#xff0c;在上回书中&#xff0c;我们说到了《微服务组件记事本&#xff1a;Skywalking执行效果 多图篇》&#xff0c;文章比较详细的展示了Skywalking中的各种数据和图表展示&#xff0c;有些小伙伴群里问我&#xff0c;…

计算机游戏50关,YELLOW游戏全50关攻略

yellow游戏是一款比较休闲的游戏作品&#xff0c;这款游戏中需要通过变换将屏幕全部调整成黄色&#xff0c;虽然操作不难&#xff0c;但比较考验思维能力&#xff0c;下面是全50关通关攻略&#xff0c;大家可以参考参考。【注&#xff1a;以下为攻略&#xff0c;不想看的不用点…

2021年将迎接你的是什么?

1 2021年迎接你的是...&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 原来帅真的可以当饭吃&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 我的芒果千层到了吗&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 这个岗位的上一…

log4j:WARN No appenders could be found for logger

2019独角兽企业重金招聘Python工程师标准>>> 提示这个错误是因为log4j的环境没有配置的原因&#xff0c;在src目录下新建一个log4j.properties的文件&#xff0c;黏贴如下内容即可解决。 # Configure logging for testing: optionally with log file log4j.rootLog…

推荐Mongodb GUI 可视化管理工具-NoSQLBooster

工欲善其事&#xff0c;必先利其器。虽然 MongoDB 已经提供了默认的管理工具&#xff08;CLI&#xff09;Shell 命令行&#xff0c;但是每次登录时都需要做身份认证&#xff0c;切换数据库等等一系列繁琐的操作&#xff0c;时间久了还是挺闹心的。实际开发中&#xff0c;还是会…

使用string.Format需要注意的一个性能问题

今天&#xff0c;我在写C#代码时&#xff0c;突然发现一个最熟悉的陌生人 —— string.Format。在写C#代码的日子里&#xff0c;与它朝夕相伴&#xff0c;却没有真正去了解它。只知道在字符串比较多时&#xff0c;用它比用加号进行字符串连接效率更高&#xff08;当然也更方便&…

为什么说,每个人都应该多读些书?

全世界只有3.14 % 的人关注了爆炸吧知识知乎上有个高赞问题&#xff1a;有哪些值得长期坚持下去就能改变人生的好习惯&#xff1f;其中最高频的回答是读书。随着经历和阅历的增加&#xff0c;越来越多的人清醒的认识到&#xff1a;读书不再是学生时代的事&#xff0c;而是一生的…

兄弟机cnc系统面板图解_FANUC软操作面板的应用介绍,真的太详细了

FANUC软操作面板介绍&#xff1a;FANUC软操作面板功能是CNC系统软件的一项功能&#xff0c;可以利用MDI键盘上的光标移动按键和轴移动方向按键 代替机床操作面板的按钮&#xff0c;结合显示器的显示&#xff0c;实现与操作面板同样的功能。在CNC系统安装到机床上之前进行调试试…

C# 中静态调用C++dll 和C# 中动态调用C++dll

在最近的项目中&#xff0c;牵涉到项目源代码保密问题&#xff0c;由于代码是C#写的&#xff0c;容易被反编译&#xff0c;因此决定抽取核心算法部分使用C编写&#xff0c;C到目前为止好像还不能被很好的反编译&#xff0c;当然如果你是反汇编高手的话&#xff0c;也许还是有可…

有生之年必看!千古第一奇书《山海经》到底是怎样的一本书?

▲点击查看提到《山海经》&#xff0c;大家应该都耳熟能详。作为一部富有神话色彩的千古奇书&#xff0c;它记载了各种脍炙人口的神话传说&#xff0c;像女娲造人、夸父逐日、羿射九日、精卫填海、大禹治水……都是从这里诞生的。除了神话传说&#xff0c;它内容之博大&#xf…

sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列

设计实现双端队列。你的实现需要支持以下操作&#xff1a;MyCircularDeque(k)&#xff1a;构造函数,双端队列的大小为k。insertFront()&#xff1a;将一个元素添加到双端队列头部。如果操作成功返回 true。insertLast()&#xff1a;将一个元素添加到双端队列尾部。如果操作成功…

Android之事件总线EventBus详解

顾名思义&#xff0c;AndroidEventBus是一个Android平台的事件总线框架&#xff0c;它简化了Activity、Fragment、Service等组件之间的交互&#xff0c;很大程度上降低了它们之间的耦合&#xff0c;使我们的代码更加简洁&#xff0c;耦合性更低&#xff0c;提升了我们的代码质量…

当女朋友问你会不会出轨的时候,该怎么回答?

1 大象为什么会害怕体型小的动物&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 学会说话很重要&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 原来&#xff0c;他们的老爸是一串香肠&#xff1f;&#xff08;素材来源网络&#xff0c;侵…

WPF开源项目:WPF-ControlBase

仓库截图仓库README很素&#xff0c;但看作者README贴的几篇博文介绍&#xff0c;你会喜欢上它的&#xff0c;废话不多说&#xff0c;上介绍目录&#xff1a;动画封装https://blog.csdn.net/u010975589/article/details/95974854属性表单https://blog.csdn.net/u010975589/arti…

Win10系统修改MAC地址

本地管理地址&#xff0c;输入想修改的MAC地址后&#xff0c;点确定即完成修改。在CMD窗口中&#xff0c;使用ipconfig 命令可以查看新的MAC地址。 再次钩选不存在&#xff0c;则还原为原来的MAC地址。

ftp上传图片出现550_FtpClient 实现文件上传

FtpUtils 工具类封装 public static boolean uploadFile( String hostname, int port, String username, String password, String pathname, String remote,InputStream local) { boolean flagfalse; try{ //创建 FtpClient 对象 FTPClient clientnew FTPClient…

ZOJ 3228(AC自动机+修改的匹配)

题目大意&#xff1a;给出一个字符串和若干个单词&#xff0c;问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现&#xff0c;1为不可重叠出现。 分析&#xff1a;可重叠出现的单词可以直接用ac自动机就解决。至于不可重叠的单词&#xff0c;可以用一个数…