AuthorizeAttribute для веб-API (ASP.NET Core 2) - PullRequest
0 голосов
/ 15 марта 2019

Я хочу использовать AuthorizeAttribute для своих методов Web API.Но когда пользователь не авторизован, метод возвращает Login-View вместо простого кода 401-статуса.

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{           
    // Another code.
    services.AddDefaultIdentity<User>(opt => {})
    .AddEntityFrameworkStores<MyDbContext>();
    // Another code.
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // Another code.
    app.UseAuthentication();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "api/{controller}/{action=Index}/{id?}");
    });

    app.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp";

        if (env.IsDevelopment())
        {
            spa.UseReactDevelopmentServer(npmScript: "start");
        }
    });
    // Another code.
}

SimpleController.cs:

[Route("api/[controller]")]
public class SimpleController : Controller
{
    [Authorize]
    [HttpGet("{id}")]
    public int Index(int Id)
    {
        return Id;
    }
}

В ASP.NET MVC 5 у нас есть оба AuthorizeAttribute:

  1. System.Web.Http.AuthorizeAttribute - который используется для веб-API.
  2. System.Web.Mvc.AuthorizeAttribute - который используется для контроллеровс представлениями.

Но ASP.NET Core 2.0 имеет только один вид атрибута - для контроллеров с представлениями.Что мне нужно сделать, чтобы получить коды состояния (401, 403) вместо просмотров?

1 Ответ

3 голосов
/ 16 марта 2019

ASP.NET Core Identity использует проверку подлинности cookie, и поэтому вы можете переопределить CookieAuthenticationOptions.Events, чтобы заставить его работать так, как вам нужно. Удостоверение обеспечивает ConfigureApplicationCookie метод конфигурации для этого.

services.ConfigureApplicationCookie(options =>
{
    //this event is called when user is unauthorized and is redirected to login page
    options.Events.OnRedirectToLogin = context =>
    {
        context.Response.StatusCode = 401;

        return Task.CompletedTask;
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...