Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC 5错误重定向登录页_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# 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-未经授权”。如何解决此问题?通过这样做,

我正在使用“个人用户帐户”身份验证模板创建ASP.NET MVC 5。 然后,我创建自定义登录页面,使用表单身份验证从数据库对用户进行身份验证

<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() {
}