ASP.Net 中间件 return 404 而不是将请求处理到正确的控制器
ASP.Net Middleware return 404 instead of processing the request to the correct controller
正在使用正确的映射路径触发中间件,但由于某种原因,它们都导致 NotFound (404) 状态并且不会继续到控制器。
如果我删除中间件,所有请求都会按预期工作。
我在我的项目中构建了一个简单的中间件 "doing nothing for now" 这里是中间件 class :
public class SessionMiddleware : IMiddleware
{
private readonly ISessionAPI _sessionAPI;
public SessionMiddleware(ISessionAPI sessionAPI)
{
_sessionAPI = sessionAPI;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
await next(context);
}
}
这是我的项目在启动配置中使用的所有中间件:
app.Use(async (context, next) =>
{
AllLanguage lg = AllLanguage.fr_CA;
ClaimsPrincipal cp = context.User;
lg = cp.GetLanguage(context);
CultureInfo.CurrentCulture = new CultureInfo(ResourcesAPI.GetLocaleByAllLanguageEnum(lg));
CultureInfo.CurrentUICulture = new CultureInfo(ResourcesAPI.GetLocaleByAllLanguageEnum(lg));
await next();
});
app.MapWhen(context => context.Request.Path.StartsWithSegments("/api/Quotations") ||
context.Request.Path.StartsWithSegments("/api/Users") ||
context.Request.Path.StartsWithSegments("/api/ESUsersCompanies") ||
context.Request.Path.StartsWithSegments("/api/Fees") ||
context.Request.Path.StartsWithSegments("/api/Products") ||
context.Request.Path.StartsWithSegments("/api/UserSettingAdmins") ||
context.Request.Path.StartsWithSegments("/api/Providers"), appBuilder =>
{
appBuilder.UseMiddleware<SessionMiddleware>();
});
这是服务:
services.AddTransient<SessionMiddleware>();
新的 appBuilder 配置确实也需要默认路由,我认为它是隐式的。
我添加了这一行:
appBuilder.UseMvcWithDefaultRoute()
低于
appBuilder.UseMiddleware<SessionMiddleware>();
正在使用正确的映射路径触发中间件,但由于某种原因,它们都导致 NotFound (404) 状态并且不会继续到控制器。
如果我删除中间件,所有请求都会按预期工作。
我在我的项目中构建了一个简单的中间件 "doing nothing for now" 这里是中间件 class :
public class SessionMiddleware : IMiddleware
{
private readonly ISessionAPI _sessionAPI;
public SessionMiddleware(ISessionAPI sessionAPI)
{
_sessionAPI = sessionAPI;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
await next(context);
}
}
这是我的项目在启动配置中使用的所有中间件:
app.Use(async (context, next) =>
{
AllLanguage lg = AllLanguage.fr_CA;
ClaimsPrincipal cp = context.User;
lg = cp.GetLanguage(context);
CultureInfo.CurrentCulture = new CultureInfo(ResourcesAPI.GetLocaleByAllLanguageEnum(lg));
CultureInfo.CurrentUICulture = new CultureInfo(ResourcesAPI.GetLocaleByAllLanguageEnum(lg));
await next();
});
app.MapWhen(context => context.Request.Path.StartsWithSegments("/api/Quotations") ||
context.Request.Path.StartsWithSegments("/api/Users") ||
context.Request.Path.StartsWithSegments("/api/ESUsersCompanies") ||
context.Request.Path.StartsWithSegments("/api/Fees") ||
context.Request.Path.StartsWithSegments("/api/Products") ||
context.Request.Path.StartsWithSegments("/api/UserSettingAdmins") ||
context.Request.Path.StartsWithSegments("/api/Providers"), appBuilder =>
{
appBuilder.UseMiddleware<SessionMiddleware>();
});
这是服务:
services.AddTransient<SessionMiddleware>();
新的 appBuilder 配置确实也需要默认路由,我认为它是隐式的。 我添加了这一行:
appBuilder.UseMvcWithDefaultRoute()
低于
appBuilder.UseMiddleware<SessionMiddleware>();