ASP.Net中间件返回404而不是处理对正确控制器的请求

时间:2018-06-28 19:49:11

标签: asp.net-core asp.net-core-2.0 asp.net-core-middleware

正在使用正确的映射路径触发中间件,但是由于某种原因,它们都导致NotFound(404)状态,并且不会继续执行控制器。

如果我删除中间件,则所有请求均按预期进行。

我在我的项目中构建了一个简单的中间件“暂时不做任何事情”,这里是中间件类:

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

1 个答案:

答案 0 :(得分:1)

新的appBuilder配置也确实需要默认路由,我认为它是隐式的。 我添加了这一行:

appBuilder.UseMvcWithDefaultRoute() 

下方

appBuilder.UseMiddleware<SessionMiddleware>();