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

    [AllowAnonymous]
    public ActionResult List()
    {
        return View();
    }
}

如何删除名为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}
                });
        }
    }
}

下面的代码生成错误消息:错误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 MVC5功能
if (this.IsAnonymousAction(context))

最佳答案

由于它是您的自定义过滤器,因此您可以将其扩展为处理AllowAnonymous(如果您不想使用AllowAnonymous,则可以创建自己的f.e. 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();
    }
}

关于c# - 是否可以在MVC 5 Controller 中的一项操作上禁用身份验证筛选器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26652433/

10-09 03:11