Sai*_*war 6 asp.net-core asp.net-core-middleware
什么时候使用Map和MapWhen分支在asp.net核心中间件我们正在验证请求.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Map("", (appBuilder) =>
{
appBuilder.Run(async (context) => {
await context.Response.WriteAsync("");
});
});
app.MapWhen(context => context.Request.Query.ContainsKey(""), (appBuilder) =>
{
appBuilder.Run(async (context) =>
{
await context.Response.WriteAsync("");
});
});
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*mer 23
接受的答案是有帮助的,但并不完全准确。除了谓词逻辑之外,Map和之间的主要区别MapWhen是Map将MapMiddleware添加到管道(参见此处),而MapWhen将MapWhenMiddleware添加到管道(参见此处)。这样做的效果是Map将更新Request.Path和Request.PathBase以考虑基于路径的分支(修剪匹配的路径段Request.Path并将其附加到Request.PathBase),而看似等效的MapWnen谓词则不会。这会影响使用该路径的任何下游,例如路由!
Cod*_*ler 12
Map可以仅基于指定请求路径的匹配来分支请求.MapWhen功能更强大,允许根据使用当前HttpContext对象操作的指定谓词的结果来分支请求.到目前为止,HttpContext包含有关HTTP请求的所有信息,MapWhen允许您使用非常具体的条件来分支请求管道.
任何Map呼叫都可以轻松转换为MapWhen,但反之亦然.例如这个Map电话:
app.Map("SomePathMatch", (appBuilder) =>
{
appBuilder.Run(async (context) => {
await context.Response.WriteAsync("");
});
});
Run Code Online (Sandbox Code Playgroud)
相当于以下MapWhen调用:
app.MapWhen(context => context.Request.Path.StartsWithSegments("SomePathMatch"), (appBuilder) =>
{
appBuilder.Run(async (context) =>
{
await context.Response.WriteAsync("");
});
});
Run Code Online (Sandbox Code Playgroud)
所以回答你的问题"何时使用Map和MapWhen分支":Map当你基于请求路径分支请求时使用.MapWhen根据HTTP请求中的其他数据分支请求时使用.
| 归档时间: |
|
| 查看次数: |
5148 次 |
| 最近记录: |