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>();