[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 MVC5Features
if (this.IsAnonymousAction(context))
答案 0 :(得分:9)
由于它是您的自定义过滤器,您可以将其扩展为处理AllowAnonymous
(如果您不想使用AllowAnonymous,yoy可以创建自己的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();
}
}
答案 1 :(得分:1)
试试
[AllowAnonymous]
属性
答案 2 :(得分:0)
如果您为该操作指定了特定的用户组,并且在自定义身份验证过滤器中允许此组用于所有内容。
答案 3 :(得分:0)
在MVC 5中我引用http://www.dotnetcurry.com/showarticle.aspx?ID=975 类CustomOverrideAuthorizationAttribute继承自FilterAttribute类并实现IOverrideFilter。此接口用于定义应用于控制器的过滤器。 FiltersToOverride属性返回IAuthorizationFilter类型。这意味着将覆盖在父(控制器或全局应用程序类)上应用的授权过滤器
答案 4 :(得分:0)
我相信您应该从控制器中删除该属性并将其放在除List之外的每个操作方法上。
答案 5 :(得分:0)
因此,阅读有关@Bilal posted (Oct 30 '14 at 12:24)的文章,似乎有一种优雅的方法可以按类(或接口)覆盖过滤器。您必须为要覆盖的每个过滤器编写一个自定义属性,但这可能不是一个大问题,如果您认为您可能不想覆盖许多过滤器,对吗?
因此,在您的问题中,您想覆盖AutherizationUser
属性,因此您将实现此类:
public class CustomOverrideAuthenticateUserAttribute :
FilterAttribute, IOverrideFilter
{
public Type FiltersToOverride
{
get
{
return typeof(AuthenticateUserAttribute);
}
}
}
并将您的控制器重写为:
[AuthenticateUser]
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
[CustomOverrideAuthenticateUser]
public ActionResult List()
{
return View();
}
}