首页 > 解决方案 > Map* 与 MapMiddleware*

问题描述

ASP.NET CORE MVC 有路由映射的方法:

并使用中间件:

有什么区别吗?从视觉上看,它们解决了同样的问题。

什么时候用一个代替另一个?

标签: c#.netasp.net-core

解决方案


您可以从方法签名中看到区别:

public static IRouteBuilder MapVerb(this IRouteBuilder builder,
    string verb, string template, RequestDelegate handler);

public static IRouteBuilder MapMiddlewareVerb(this IRouteBuilder builder,
    string verb, string template, Action<IApplicationBuilder> action);

MapVerb用于注册具有特定路由的请求委托。这允许您直接在该路由上运行代码以产生结果。例如:

route.MapGet("/test", async context =>
{
    await context.Response.WriteAsync("Hello world");
});

MapMiddlewareVerb另一方面用于注册应用程序构建器管道。这基本上允许您分叉中间件管道并在特定路由上执行中间件。这类似于直接分叉中间件管道的MapWhen方法。但是MapMiddlewareVerb使用端点路由来做到这一点:

route.MapMiddlewareGet("/test", testApp =>
{
    testApp.UseStaticFiles();
    testApp.UseMiddleware<MyCustomMiddleware>();
});

至于其他具有特定动词的方法,它们只是 and 的快捷MapVerb(<verb>, …)方式MapMiddlewareVerb(<verb>, …)


推荐阅读