Промежуточное ПО для исключения типа файла из аутентификации - PullRequest
3 голосов
/ 04 апреля 2019

У меня есть это промежуточное ПО, которое проверяет, прошел ли аутентификация пользователя по всем входящим запросам.

app.Use(async (context, next) =>
{
    if (!context.User.Identity.IsAuthenticated 
        && context.Request.Path != "/Home/Index"
        && context.Request.Path != "/Home/Login")
    {
        await context.ChallengeAsync();
    }
    else
    {
        await next();
    }
});

Однако существует тип файла (PBF), который не нуждается в защите. Запрос будет что-то вроде:

context.Request.Path = site / folder / 68-09.pbf

По сути, эти файлы представляют собой двоичные файлы, которые используются для визуализации объектов на открытой карте улиц, когда пользователь перетаскивает свою мышь в геолокацию, поэтому эти файлы могут отображаться 100 раз в секунду! Поэтому я хотел бы не проверять их в промежуточном программном обеспечении, чтобы ускорить работу сайта.

Я пробовал это:

app.UseWhen(context => !context.Request.Path.Value.Contains(".pbf"), appBuilder =>
{
    app.Use(async (context, next) =>
    {
        if (!context.User.Identity.IsAuthenticated
            && context.Request.Path != "/Home/Index"
            && context.Request.Path != "/Home/Login")
        {
            await context.ChallengeAsync();
        }
        else
        {
            await next();
        }
    });
});

Но это не избегает файлов PBF, возможно ли это, и если да, то какая-нибудь помощь?

1 Ответ

2 голосов
/ 04 апреля 2019

Изменить вложенный app.Use() на appBuilder.Use():

asp.UseWhen(context => !context.Request.Path.Value.Contains(".pbf"), appBuilder =>
{
    appBuilder.Use(async (context, next) =>
    {
        if (!context.User.Identity.IsAuthenticated
            && context.Request.Path != "/Home/Index"
            && context.Request.Path != "/Home/Login")
        {
            await context.ChallengeAsync();
        }
        else
        {
            await next();
        }
    });
});
...