Я пытаюсь такой подход, и VS жалуется с «IAppBuilder не содержит определения для UseStatusCodePages». У тебя есть идея почему? (К вашему сведению, я использую Asp.Net MVC с Framework 4.6.1)

я есть эта конфигурация авторизации JWT в моем Startup.cs:

services.AddAuthentication(opts =>
{
    opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(opts =>
{
    opts.RequireHttpsMetadata = false;
    opts.SaveToken = true;
    opts.TokenValidationParameters = new TokenValidationParameters()
    {
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("my_secret_key")),
        ValidIssuer = "iss",
        ValidAudience = "aud",
        ValidateIssuerSigningKey = true,
        ValidateLifetime = true
    };
});

Мой HomeController имеет атрибут [Authorize]. Таким образом, при доступе к Home / Index я получаю ответ 401, и мне представляется пустая страница. Я хочу перенаправить на свою учетную запись / страницу входа в систему, но я не уверен, как это сделать.

Я читал, что это не должно автоматически перенаправлять, потому что это не имеет смысла для вызовов API, если они не авторизованы, а затем вы перенаправляете их, так как правильно я бы перенаправил их на страницу входа в 401.

Помните, что в этом проекте у меня есть и веб-API, и методы Action с атрибутами [Authorize], поэтому мне нужно перенаправлять только тогда, когда это метод действия.

Ответы на вопрос(2)

Решение Вопроса

Вы можете использоватьПромежуточное ПО StatusCodePages, Добавьте следующийConfigure метод:

app.UseStatusCodePages(async context => {
    var request = context.HttpContext.Request;
    var response = context.HttpContext.Response;

    if (response.StatusCode == (int)HttpStatusCode.Unauthorized)   
       // you may also check requests path to do this only for specific methods       
       // && request.Path.Value.StartsWith("/specificPath")

       {
           response.Redirect("/account/login")
       }
    });

Я читал, что это не должно автоматически перенаправлять, потому что это не имеет смысла для вызовов API

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

я смог найти ваш пост, и это сработало для меня. Вы подняли очень хороший вопрос, потому что это не имеет смысла для вызовов API приложений.

Однако у меня есть ситуация, когда действия, вызываемые из приложения, имеют определенный маршрут записи (/api/[Controller]/[Action]), что позволяет мне определить, был ли мой контроллер вызван браузером или приложением.

app.UseStatusCodePages(async context =>
{            
    var request = context.HttpContext.Request;
    var response = context.HttpContext.Response;
    var path = request.Path.Value ?? "";

    if (response.StatusCode == (int)HttpStatusCode.Unauthorized && path.StartsWith("/api", StringComparison.InvariantCultureIgnoreCase))
    {
        response.Redirect("~/Account/Login");
    }
});
 Diego Perez21 авг. 2018 г., 13:20
Я пытаюсь такой подход, и VS жалуется с «IAppBuilder не содержит определения для UseStatusCodePages». У тебя есть идея почему? (К вашему сведению, я использую Asp.Net MVC с Framework 4.6.1)

Ваш ответ на вопрос