Ну, один из способов сделать это - переопределить AuthorizeAttribute
и добавить в него собственную логику.Здесь у нас есть два случая, если вы хотите использовать его с контроллером MVC
, переопределить метод AuthorizeCore()
и использовать пространство имен System.Web.Mvc
, например:
public class MyCustomAuthorizeAttribute: AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
bool isExceptionalCase = GetIfExceptional();//Assuming here where you look for some other condition other than user is authorized
if (!isExceptionalCase && !authorized)
{
// The user is not authorized => no need to go any further
return false;
}
return true;
}
}
Второй случай, и он находится вВ вашем случае вы будете использовать его с контроллером WebApi, вместо этого вы можете переопределить IsAuthorized()
и использовать System.Web.Http
namespace:
public class MyCustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var authorized = base.IsAuthorized(actionContext);
bool isExceptionalCase = GetIfExceptional();//Assuming here where you look for some other condition other than user is authorized
if (!isExceptionalCase && !authorized)
{
// The user is not authorized => no need to go any further
return false;
}
return true;
}
}
Затем используйте пользовательский атрибут для действия или контроллера вместо стандартного:
[MyCustomAuthorize]
public ActionResult MyAction()
{
...
}