Подтвердить что ты не робот

Пользовательский атрибут авторизации не работает в WebAPI

 public class CustomAuthorizeAttribute : AuthorizationFilterAttribute
 {  
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
       return true;// if my current user is authorised
    }
 }

Выше мой класс CustomAuthorizeAttribute и

[CustomAuthorize] // both [CustomAuthorize] and [CustomAuthorizeAttribute ] I tried 
public class ProfileController : ApiController
{
   //My Code..
}

Когда я звоню

http://localhost:1142/api/Profile 

Он не стреляет CustomAuthorizeAttribute

Более того, мой класс FilterConfig выглядит ниже

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {            
        filters.Add(new CustomAuthorizeAttribute());
    }
}

Пожалуйста, помогите, если я пропущу что-то.

4b9b3361

Ответ 1

  1. Похоже, вы используете фильтр MVC вместо фильтра веб-API. Это может быть обнаружено в образце, потому что он использует HttpContextBase. Вместо этого используйте фильтр из System.Web.Http.Filters имен System.Web.Http.Filters.
  2. Вам необходимо переопределить OnAuthorization или OnAuthorizationAsync в фильтре Web API.
  3. Вам не нужно регистрировать глобальный фильтр и украшать им свой контроллер. Регистрация позволит запустить его для всех контроллеров.

Код фильтра веб-API: https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Filters/AuthorizationFilterAttribute.cs

Ответ 2

Ваш пользовательский атрибут должен наследоваться от System.Web.Http.Filters.AuthorizationFilterAttribute.

и это должно выглядеть так

using System.Web.Http.Controllers;
using System.Web.Http.Filters;
public class CustomAuthorizeAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
{   
    public override bool AllowMultiple
    {
        get { return false; }
    }

    public override void OnAuthorization(HttpActionContext actionContext)
    {
        //Perform your logic here
        base.OnAuthorization(actionContext);
    }
}

Ответ 3

Попробуйте с этим.

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        return true;
    }
}

Ответ 4

Чтобы добавить к другим ответам, которые вы унаследовали от System.Web.Http.Filters.AuthorizationFilterAttribute, я поместил это в мой метод OnAuthorization чтобы убедиться, что пользователь вошел в систему:

if (!actionContext.RequestContext.Principal.Identity.IsAuthenticated)
{
     // or whatever sort you want to do to end the execution of the request
     throw new Exception();
}