首页 > 其他分享 >webapi中间件没有使用终结点中间件时的注意事项

webapi中间件没有使用终结点中间件时的注意事项

时间:2024-05-03 20:22:05浏览次数:17  
标签:webapi UseEndpoints 终结 app 中间件 context 注意事项 Response

最小webapi默认的中间件配置是这样的

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

最小webapi没有使用app.UseRouting()app.UseEndpoints
这种情况下我们添加的所有中间件其实都是位于终结点路由中间件EndpointRoutingMiddleware终结点中间件EndpointMiddleware之间的中间件。
加入我们写了一个自定义404页面的中间件,并把它注册进去。

app.Use(async (context, next) =>
{
    context.Response.StatusCode = StatusCodes.Status404NotFound;
    context.Response.ContentType = "text/html;charset=utf-8";
    context.Response.WriteAsync("来到了知识的荒原");
    await next(context);
});

这个中间件不会以我们预料的方式运行,他会在每次请求中都被调用,而不是找不到路由时才调用。
就是因为没有注册app.UseEndpoints终结点中间件时,不存在终结点之后的中间件。而终结点之后的中间件才会在找不到路由,找不到终结点时被调用。
终结点中间件应该是在找到了终结点时会短路管道,找不到时调用next(context)
所以我们必须显式调用app.UseEndpoints,然后再到后面再注册我们的404中间件。这才会达到我们的预期。
必须注意的的是如果app.UseEndpoints被调用,那么app.UseRouting()也必须被调用。
所以这种情况下正确的写法是

app.UseRouting();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.UseEndpoints(endpoints=>{});
app.Use(async (context, next) =>
{
    context.Response.StatusCode = StatusCodes.Status404NotFound;
    context.Response.ContentType = "text/html;charset=utf-8";
    context.Response.WriteAsync("来到了知识的荒原");
    await next(context);
});
app.Run();

标签:webapi,UseEndpoints,终结,app,中间件,context,注意事项,Response
From: https://www.cnblogs.com/ggtc/p/18171567

相关文章

  • webapi创建和调用WebService
    首先需要引入soapcore包这个包提供了所需的类和soap终结点中间件。引入这个这个包之后,我们需要定义提供的服务。这里我写了一个用于查询省份面积的服务。省份信息服务///<summary>///省份信息服务接口///</summary>[ServiceContract]publicinterfaceIProvinceInfo......
  • ABAP 调用外部WEBAPI
    ABAP代码如下,仅在内部测试通过,未涉及外部网络WEBAPI及跨域调用。*&---------------------------------------------------------------------**&ReportZYC_WEBAPI*&Restfulapi测试REPORTZYC_WEBAPI.DATA:LENTYPEI,"发送报文长度LEN_STRING......
  • webapi动态创建后台任务(使用排队的后台任务)
    很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应。这时候就可以使用排队的后台任务。基本原理是用一个队列保存任务委托,然后用一个后台定时任务依次执行队列中的委托。MSD......
  • WEBAPI传参及默认首页设置
    开发工具:VS2017创建WEBAPI,1.选择ASP.NETCoreWeb应用程序2.选择如下,HTTPS配置勾选去掉,暂不配置3.“属性”中调试默认界面及launchsettings.json 4.调试以后默认页面 5. ......
  • Select 选择器使用注意事项
    <el-form-itemlabel="接口分类:":label-width="formLabelWidth"prop="category"><el-selectv-model="form.category"placeholder="请选择"><el-optionv-for="iteminth......
  • 数据库中间件-He3Proxy
    什么是数据库中间件?随着互联网行业的蓬勃发展,业务访问量、数据量激增,传统数据库的单库、大表已成为业务发展的瓶颈,进而衍生出数据库主从实例、分库分表等方案,为减少数据库层变动对业务开发带来的复杂性,一种连接应用与数据库桥梁的工具孕育而生,即数据库中间件,它可以简单读写分离、......
  • 面试常问问题-中间件(flink)
    用处:处理流式数据1.写数据到hive(例如:埋点)2.转化数据,将二进制转化为客户端可识别的json(例如:业务层面)3.数据聚合(预警:例如访问次数,错误次数等用于判断风险阈值) 优点:1.高吞吐、低延迟、高性能兼具实时流式计算框架。2.支持高度容错的状态管理,防止状态在计算过程中因为系统异......
  • 面试常问问题-中间件一kafka
    kafka是一个分布式发布订阅消息系统名词:生产者(producer)、消费者(consumer)、topic(一个消息又一个topic)、partition(分区)作用1:传输数据(ey:埋点)kafka发送消息失败的可能:1、网络问题导致kafka的服务器无法连接;2、生产者配置错误;3、消息大小超过服务器配置的限制;4、主......
  • 面试常问问题-中间件一kafka
    kafka是一个分布式发布订阅消息系统名词:生产者(producer)、消费者(consumer)、topic(一个消息又一个topic)、partition(分区)作用1:传输数据(ey:埋点)kafka发送消息失败的可能:1、网络问题导致kafka的服务器无法连接;2、生产者配置错误;3、消息大小超过服务器配置的限制;4、主题......
  • 新手下载python和anaconda3注意事项
    新手下载python和anaconda3要注意哪些1、python关于python下载其实很简单,直接在官网下载就行。官网:WelcometoPython.org当然,到了官网下载是默认最新版本,如果你需要旧版本,那就需要找一下了,这里提供一下windows的各版本的官网链接:PythonReleasesforWindows|Python.org......