ASP.Net Middleware возвращает 404 вместо обработки запроса на правильный контроллер - PullRequest
0 голосов
/ 28 июня 2018

Промежуточное программное обеспечение запускается с правильным путем сопоставления, но по какой-то причине все они приводят к состоянию 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 голосов
/ 29 июня 2018

Новый конфиг appBuilder тоже нуждается в маршруте по умолчанию, я думал, что он неявный. Я добавил эту строку:

appBuilder.UseMvcWithDefaultRoute() 

ниже

appBuilder.UseMiddleware<SessionMiddleware>();
...