c# - Map* 与 MapMiddleware*
问题描述
ASP.NET CORE MVC 有路由映射的方法:
- 地图获取
- 地图删除
- 地图邮政
- 地图
- 地图动词
并使用中间件:
- MapMiddlewareGet
- MapMiddlewareDelete
- MapMiddlewarePost
- MapMiddlewarePut
- MapMiddlewareRoute
- MapMiddleware动词
有什么区别吗?从视觉上看,它们解决了同样的问题。
什么时候用一个代替另一个?
解决方案
您可以从方法签名中看到区别:
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>, …)
。
推荐阅读
- mongodb - mongdb 在某些变量存在时匹配,如果不存在,则不匹配
- python - 如何获得字符串 Scrapy 的结尾?
- kubernetes - 扩展 Kubernetes 2 主集群
- javascript - html中的数据没有变化
- python - 在anaconda-navigator的内核中启动python时出错
- python - 如果“__name__”==“__main__”,如何从内部将 Sys.argv[n] 传递给函数
- python - 将散景中的文本锚定/修复到图形的边界
- java - Android firebase 在尝试访问存储时引发身份验证错误
- vb.net - 如何通过 Visual Basic 以编程方式将草图文件导入 NX?
- aws-cdk - 如何使用 Projen 自动管理和更新 CDK 版本?