ASP.NET Core 6 Web API管道异常,自定义app.Run无响应
问题原因及解决方案
1. 字符串语法错误(导致应用无法启动)
你在Response.WriteAsync中使用了未转义的换行符,C#常规字符串不允许直接换行,这会触发编译错误,进而导致应用无法正常启动。
修复方式二选一:
- 使用转义字符
\n表示换行:await context.Response.WriteAsync("I'm upgrading!\nTRY AGAIN LATER"); - 使用逐字字符串前缀
@(保留原始换行格式):await context.Response.WriteAsync(@"I'm upgrading!
TRY AGAIN LATER");
#### 2. 中间件顺序问题(修复后可能仍不显示消息) `app.Run`是**终端中间件**,执行后会直接终止请求管道。你当前把它放在`MapControllers`之后,只有当请求没有匹配到任何控制器路由时,才会走到这个中间件。如果希望所有请求都返回维护消息,需要把`app.Run`移到路由相关中间件(`UseAuthorization`、`MapControllers`)之前,甚至可以注释掉Swagger和控制器路由的注册,确保所有请求都进入维护逻辑。 修正后的完整代码示例: ```csharp var builder = WebApplication.CreateBuilder(args); // 不需要控制器和Swagger时可注释以下服务注册 // builder.Services.AddControllers(); // builder.Services.AddEndpointsApiExplorer(); // builder.Services.AddSwaggerGen(); var app = builder.Build(); // 不需要Swagger时可注释以下代码 // if (app.Environment.IsDevelopment()) // { // app.UseSwagger(); // app.UseSwaggerUI(); // } app.UseHttpsRedirection(); // 全局维护消息,放在所有路由中间件之前 app.Run(async context => { await context.Response.WriteAsync(@"I'm upgrading! TRY AGAIN LATER"); }); // 不需要控制器路由时可注释以下代码 // app.UseAuthorization(); // app.MapControllers();
内容的提问来源于stack exchange,提问作者lalita zarei
相关产品推荐
相关产品推荐

