C# ASP.NET MVC 5错误重定向登录页
我正在使用“个人用户帐户”身份验证模板创建ASP.NET MVC 5。 然后,我创建自定义登录页面,使用表单身份验证从数据库对用户进行身份验证C# ASP.NET MVC 5错误重定向登录页,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我正在使用“个人用户帐户”身份验证模板创建ASP.NET MVC 5。 然后,我创建自定义登录页面,使用表单身份验证从数据库对用户进行身份验证 <authentication mode="Forms"> <forms loginUrl="~/User/SignIn" timeout="2880" protection="All" /> </authentication> 我有HTTP错误:“HTTP错误401.0-未经授权”。如何解决此问题?通过这样做,
<authentication mode="Forms">
<forms loginUrl="~/User/SignIn" timeout="2880" protection="All" />
</authentication>
我有HTTP错误:“HTTP错误401.0-未经授权”。如何解决此问题?通过这样做,您可以对登录和注册操作设置身份验证限制。 所以基本上你需要经过授权才能登录或注册。
将allowAnonymous属性放在这些操作上可能会解决问题。您已经添加了一个全局属性。您需要将属性
[AllowAnonymous]
附加到不希望应用规则的属性上
[AllowAnonymous]
public ActionResult Home() {
// ...
}
因为您向全局筛选器添加了
AuthorizeAttribute
。当您没有授权和访问权限时,所有操作将重定向到“~/User/SignIn”,但操作映射“~/User/SignIn”也需要您授权。您可以尝试以下方法:
public class NoNeedAuthorizeAttribute : Attribute
{
}
和继承Authorization方法上的Authorization属性重写,如果操作具有noneeAuthorize
属性,则忽略:
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!filterContext.ActionDescriptor.GetCustomAttributes(typeof(NoNeedAuthorizeAttribute), true).Any())
{
base.OnAuthorization(filterContext);
}
}
将noneeauthorizeAttribute
添加到登录操作:
public class UserController : Controller
{
[NoNeedAuthorize]
public ActionResult SignIn()
{
//Sign in code..
}
}
最后,将“GlobalAuthorizeAttribute”添加到全局筛选器:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new GlobalAuthorizeAttribute());
}
因为我比任何人都早8分钟把正确答案作为评论,所以我会把它作为答案添加进去 您基本上需要将[AllowAnonymous]属性添加到您的登录操作中,因为您创建的过滤器本质上是使每个操作都需要授权才能“查看” 取自 “…在ASP.NET MVC 4中,它是预埋的。所谓预埋,我的意思是:System.Web.MVC命名空间中有一个内置的AllowAnonymousAttribute,它将匿名访问的操作列为白名单。” 取自 “ASP.NET MVC 3.0引入了全局操作筛选器—一种将操作筛选器应用于MVC应用程序中每个操作的简单方法。”
[AllowAnonymous]关于签名行动?@PaulZahra谢谢,现在它起作用了。我想我现在明白了。Okidoki,我会加上它作为答案;)为什么要重新发明轮子?AllowAnoymous属性比你在这里说的要好:)@Ahmedilyas是的,我以前从未使用过AllowAnoymous属性。但我想我现在明白了。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new GlobalAuthorizeAttribute());
}
[AllowAnonymous]
public ActionResult SignIn() {
}