是否可以在MVC 5控制器中的一个操作上禁用身份验证过滤器?

Kir*_*G.S 6 .net c# asp.net asp.net-mvc asp.net-mvc-5

[AuthenticateUser]
public class HomeController : Controller
{
    //
    // GET: /Home/
    public ActionResult Index()
    {
        return View();
    }

    [AllowAnonymous]
    public ActionResult List()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

如何删除名为List的操作的身份验证?请指教....

我的自定义过滤器编码如下..我也继承了FilterAttribute调用.请告知

public class AuthenticateUserAttribute: FilterAttribute, IAuthenticationFilter
{
    public void OnAuthentication(AuthenticationContext context)
    {
        if (this.IsAnonymousAction(context))
        {

        }

        if (user == "user")
        {
            // do nothing
        }
        else
        {
            context.Result = new HttpUnauthorizedResult(); // mark unauthorized
        }
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext context)
    {
        if (context.Result == null || context.Result is HttpUnauthorizedResult)
        {
            context.Result = new RedirectToRouteResult("Default",
                new System.Web.Routing.RouteValueDictionary{
                    {"controller", "Home"},
                    {"action", "List"},
                    {"returnUrl", context.HttpContext.Request.RawUrl}
                });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的代码生成错误消息:错误1'MVC5Features.Filters.AuthenticateUserAttribute.IsAnonymousAction(System.Web.Mvc.AuthorizationContext)'的最佳重载方法匹配有一些无效的参数c:\ users\kirupananthan.g\documents\visual studio 2013\Projects\MVC5Features\MVC5Features\Filters\AuthenticateUserAttribute.cs 16 17 MVC5Features错误2参数1:无法从'System.Web.Mvc.Filters.AuthenticationContext'转换为'System.Web.Mvc.AuthorizationContext'c:\ users\kirupananthan.g\documents\visual studio 2013\Projects\MVC5Features\MVC5Features\Filters\AuthenticateUserAttribute.cs 16 40 MVC5Features

if (this.IsAnonymousAction(context))
Run Code Online (Sandbox Code Playgroud)

小智 10

由于它是您的自定义过滤器,您可以将其扩展为处理AllowAnonymous(如果您不想使用AllowAnonymous,yoy可以创建自己的fe NoAuthentication):

public class AuthenticateUser : IAuthenticationFilter
{

    public void OnAuthentication(AuthenticationContext filterContext)
    { 
        if (this.IsAnonymousAction(filterContext))
        {
            return;
        }

        // some code
    }

    private bool IsAnonymousAction(AuthenticationContext filterContext)
    {
        return  filterContext.ActionDescriptor
                             .GetCustomAttributes(inherit: true)
                             .OfType<AllowAnonymousAttribute>() 
                                             //or any attr. you want
                             .Any();
    }
}
Run Code Online (Sandbox Code Playgroud)