Пользовательский атрибут авторизации не работает в 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());
}
}
Пожалуйста, помогите, если я пропущу что-то.
Ответы
Ответ 1
- Похоже, вы используете фильтр MVC вместо фильтра веб-API. Это может быть обнаружено в образце, потому что он использует
HttpContextBase
. Вместо этого используйте фильтр из System.Web.Http.Filters
имен System.Web.Http.Filters
. - Вам необходимо переопределить OnAuthorization или OnAuthorizationAsync в фильтре Web API.
- Вам не нужно регистрировать глобальный фильтр и украшать им свой контроллер. Регистрация позволит запустить его для всех контроллеров.
Код фильтра веб-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();
}