如何根据条件使用属性。 (通过标志禁用)
How to use attributes based on condition. (disable by a flag)
我正在使用 "Authorize"
来自:System.Web.Http
基本控制器的属性。
问题是我需要根据条件使用它。
(假设我有一个我不需要的模式 authentication/authorization)。
我该如何实现?
谢谢。
实现此目的的一种方法是覆盖 AuthorizeAttribute
,并在其中添加自定义逻辑。
这里我们有两种情况,如果您想将它与 MVC
控制器一起使用,覆盖 AuthorizeCore()
方法并使用 System.Web.Mvc
名称 space,如下所示:
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()
{
...
}
您可以在特定方法或控制器中使用 AllowAnonymousAttribute 来 "override" 在基本控制器中使用的 AuthorizeAttribute。
检查参考:https://docs.microsoft.com/en-us/previous-versions/aspnet/hh835113(v%3dvs.118)
作为另一个选项,您可以创建一个自定义属性并在您的基本控制器中使用它。通过这种方式,您可以在自定义属性中添加决策所需的所有逻辑。
检查参考:https://docs.microsoft.com/en-us/dotnet/standard/attributes/writing-custom-attributes
此致,洛杉矶。
我正在使用 "Authorize"
来自:System.Web.Http
基本控制器的属性。
问题是我需要根据条件使用它。
(假设我有一个我不需要的模式 authentication/authorization)。
我该如何实现?
谢谢。
实现此目的的一种方法是覆盖 AuthorizeAttribute
,并在其中添加自定义逻辑。
这里我们有两种情况,如果您想将它与 MVC
控制器一起使用,覆盖 AuthorizeCore()
方法并使用 System.Web.Mvc
名称 space,如下所示:
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()
{
...
}
您可以在特定方法或控制器中使用 AllowAnonymousAttribute 来 "override" 在基本控制器中使用的 AuthorizeAttribute。
检查参考:https://docs.microsoft.com/en-us/previous-versions/aspnet/hh835113(v%3dvs.118)
作为另一个选项,您可以创建一个自定义属性并在您的基本控制器中使用它。通过这种方式,您可以在自定义属性中添加决策所需的所有逻辑。
检查参考:https://docs.microsoft.com/en-us/dotnet/standard/attributes/writing-custom-attributes
此致,洛杉矶。