x.UseMiddlewareLogic1() ); 我的 Configure 的完整代码如下所示 pub-6ren">
gpt4 book ai didi

model-view-controller - 简单的 app.map() 不工作 MVC 核心

转载 作者:行者123 更新时间:2023-12-02 03:00:22 25 4
gpt4 key购买 nike

在 Startup.cs 中我有一个非常简单的 map

app.Map("/Home",x=>x.UseMiddlewareLogic1() );

我的 Configure 的完整代码如下所示

public void Configure(IApplicationBuilder app)
{
app.Map("/Home",x=>x.UseMiddlewareLogic1() );
//app.UseMiddlewareLogic1();
//app.UseMiddlewareLogic2();
app.Run(async context =>
Logic3(context));
}

Logic 3 只是响应写入如下图

 public async Task Logic3(HttpContext obj)
{
await obj.Response.WriteAsync("Logic 3\n");

}

上面的代码显示404 not found。中间件逻辑类是Visual Studio模板中的标准类。我正在使用 VS 2017。

 public class MiddlewareLogic1
{
private readonly RequestDelegate _next;

public MiddlewareLogic1(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(HttpContext httpContext)
{
await httpContext.Response.WriteAsync("This is logic123 \n");
await _next(httpContext);
}
}

// Extension method used to add the middleware to the HTTP request pipeline.
public static class MiddlewareLogic1Extensions
{
public static IApplicationBuilder UseMiddlewareLogic1(this IApplicationBuilder builder)
{
return builder.UseMiddleware<MiddlewareLogic1>();
}

}

最佳答案

这是你的问题:app.Map("/Home",x=>x.UseMiddlewareLogic1());

如果您正在使用 app.Map,框架将不会在 Map 分支之外执行中间件(在 app.Map 之后注册 -中间件的顺序很重要)。相反,它会自动终止它。换句话说,您永远不需要在 .Map 中使用 .Run 来终止管道。

你得到 404 因为 await _next(httpContext);Map 中使用的 MiddlewareLogic1 中间件中,但没有其他在此 Map 分支中注册的管道。如果您删除 await _next(httpContext);,您将在响应中看到 “This is logic123 而不是 404。


更新:.Map.MapThen 具有相同的终止行为。作为解决方案,您可以考虑- 将 .Map 替换为 .Use 并在内部查询比较登录。- 或者在 .app.Map 中注册一个单独的中间件链。

关于model-view-controller - 简单的 app.map() 不工作 MVC 核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46481860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com