Ale*_*lex 9 .net c# asp.net-mvc authorize-attribute action-filter
我想知道是否/如何覆盖ASP.NET MVC中的默认[Authorize]行为.我知道我可以创建一个新的Action Filter,创建自己的属性等等; 我只是感兴趣,如果我可以简单地更改[授权]行为并用我自己的代码替换它的工作?
编辑:男孩和女孩.感谢您的意见,但正如我所写,我不打算引入新的[XYZAuthorize]属性.我知道怎么做.我想保留[授权]符号,但只是改变它的工作原理.
您可以继承AuthorizeAttribute过滤器并将自己的逻辑放入其中.
我们来看一个例子吧.假设您想要始终授权本地连接.但是,如果它是远程连接,您希望保留通常的授权逻辑.
你可以这样做:
public class LocalPermittedAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return (httpContext.Request.IsLocal || base.AuthorizeCore(httpContext)));
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以随时授权某个远程地址(例如您的机器).
而已!
编辑:忘记提及,您将使用它与使用AuthorizeAttribute过滤器相同:
class MyController : Controller
{
[LocalPermittedAuthorize]
public ActionResult Fire()
{
Missile.Fire(Datetime.Now);
}
}
Run Code Online (Sandbox Code Playgroud)
是的,请查看AuthorizeAttribute的MSDN文档:http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx.
基本上,您可以覆盖OnAuthorization()方法并自定义行为.该属性上还有其他虚拟方法.
编辑:正如Bruno所指出的,您可以覆盖AuthorizeCore()方法.主要区别在于AuthorizeCore()采用HttpContextBase,而OnAuthorization()采用AuthorizationContext.AuthorizationContext的实例为您提供了更多信息,例如Controller,RequestContext和RouteData.它还允许您指定ActionResult.
AuthorizeCore()在您可以访问的信息以及可以返回的结果中受到更多限制,但是如果您需要授权缓存数据,那么您的逻辑需要处理您没有任何额外数据的情况(因为在通过MVC管道路由请求之前从缓存提供数据.
与往常一样,您需要了解您的场景以及它们之间的可用工具和权衡.
| 归档时间: |
|
| 查看次数: |
10113 次 |
| 最近记录: |