我有一个控制器,我想在默认情况下要求所有操作的授权,除了几个.因此,在下面的示例中,除了索引之外,所有操作都需要身份验证.我不想用Authorize来修饰每一个操作,我只想在某些情况下覆盖默认授权,可能是使用一个自定义过滤器,比如NotAuthorize.

[Authorize]
public class HomeController : BaseController
{
    [NotAuthorize]
    public ActionResult Index()
    {
        // This one wont
        return View();
    }

    public ActionResult About()
    {
        // This action will require authorization
        return View();
    }
}

推荐答案

好吧,我就是这么做的.如果有更好的方法,请告诉我.

public class NotAuthorizeAttribute : FilterAttribute
{
    // Does nothing, just used for decoration
}

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Check if this action has NotAuthorizeAttribute
        object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(true);
        if (attributes.Any(a => a is NotAuthorizeAttribute)) return;

        // Must login
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new HttpUnauthorizedResult();
        }
    }
}

Asp.net相关问答推荐

如何使用 Get-Process powershell 命令通过端口号获取进程的 ID

如何将标头中的用户名/密码传递给 SOAP WCF 服务

如何在 Javascript 中获取 C# 枚举

此版本的 SQL Server 不支持用户实例登录标志.连接将关闭

IIS HTTP 错误 500.19

如何在 ASP.NET 中以 'YYYY-MM-DD' 格式获取当前日期?

Firefox 和 Chrome 之间 1 像素的行高差

SignalR + Autofac + OWIN:为什么 GlobalHost.ConnectionManager.GetHubContext 不起作用?

VS2013发布Web部署任务失败文件正在使用中

RestSharp 不反序列化 JSON 对象列表,始终为 Null

免费的 ASP.Net 和/或 CSS 主题

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

Owin.IAppBuilder不包含MapSignalR的定义

svg 无法在 localhost 上的 IIS 网络服务器上运行

如何在我自己的方法中模仿 string.Format()?

如何判断本地主机

将 MemoryStream 写入响应对象

如何将我的 Autofac 容器插入 ASP. NET 身份 2.1

IsMobileDevice 是如何工作的?

ASP.NET MVC3 局部视图命名约定