asp.net-mvc – ASP.Net MVC 3:反向授权属性
|
我有一个简单的ASP.Net MVC 3应用程序,它有一些控制器和很少的动作. 现在,由于这是基于用户的应用程序,因此大多数控制器操作都需要对用户进行身份验证. MVC使用内置的Authorize属性处理这个问题,您可以使用该属性单独装饰控制器和/或操作. 最棒的是你可以将属性应用于控制器,并且该给定控制器的所有操作也将应用它 – 保存了大量的输入;) 但我有一个控制器,比方说,10个动作.但我希望其中一个操作没有应用Authorize属性. 是的,我可以将该属性应用于其他9并将其从控制器中删除,这将完全符合我的需要.但有没有办法将它应用于控制器,只是选择排除其中一个动作? 实际上,会想要…… [!授权]或[NotAuthorize] 我知道我可以创建一个可以完成工作的自定义工具,但我想知道的是,是否有内置方法可以做到这一点?或者我是否必须将该属性应用于所有其他9个其他操作? 解决方法菲尔·哈克(Phil Haack)最近写了一篇关于这个确切场景的博文:Conditional Filters in ASP.NET MVC 3 他的解决方案包括编写一个自定义的“条件过滤器提供程序”,允许人们为动作方法的属性指定过滤条件. 细节和推理在他的帖子中,但代码相对简单.首先,创建过滤器提供程序: using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
public class ConditionalFilterProvider : IFilterProvider {
private readonly
IEnumerable<Func<ControllerContext,ActionDescriptor,object>> _conditions;
public ConditionalFilterProvider(
IEnumerable<Func<ControllerContext,object>> conditions)
{
_conditions = conditions;
}
public IEnumerable<Filter> GetFilters(
ControllerContext controllerContext,ActionDescriptor actionDescriptor) {
return from condition in _conditions
select condition(controllerContext,actionDescriptor) into filter
where filter != null
select new Filter(filter,FilterScope.Global,null);
}
}
然后应用它: IEnumerable<Func<ControllerContext,object>> conditions =
new Func<ControllerContext,object>[] {
(c,a) => c.Controller.GetType() != typeof(HomeController) ?
new MyFilter() : null,(c,a) => a.ActionName.StartsWith("About") ? new SomeFilter() : null
};
var provider = new ConditionalFilterProvider(conditions);
FilterProviders.Providers.Add(provider); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET和C#重定向
- asp.net – 有没有比升级到Visual Studio 2010 Ultimate更便
- asp.net-mvc – .NET MVC / Entity Framework应用程序中的内
- Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附
- asp.net – 为什么aspx代码隐藏文件被声明为部分类?
- asp.net – HTML divs可以在浏览器窗口之外?
- asp.net-mvc-4 – 在ASP.NET MVC中包文件位置
- asp.net-mvc-3 – 动态加载部分视图
- asp.net-mvc – @ Html.DropDownListFor如何添加选项?
- asp.net-mvc – 将参数传递给Azure Active Directory身份验
- asp.net – @ Html.EditorForModel()下拉列表
- ASP.NET ListView – 渲染THEAD / TBODY标签
- asp.net-mvc-3 – 任务/线程的Ninject Scope问题
- asp.net – 需要一个必须同时具有数字和字母字符
- iis-7 – 使用asp.net在开发机器上创建无cookie应
- 为什么ASP.NET回发时请求cookie属性为null或不正
- asp.net-mvc – 在web.config文件中创建自定义变
- 如何添加自定义属性到ASP.NET控件
- asp.net – 为什么aspnet_compiler.exe这么慢(可
- asp.net-mvc – 如何添加命名空间到自定义路由扩
