2

我在 MVC 项目中有登录页面,我创建了授权配置。

  <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880"  defaultUrl="~/Home/Index"/>
    </authentication>

  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

如何在注册页面访问?

4

3 回答 3

4

根据您使用的 MVC 版本,我现在在 MVC3/4 中看到的常见做法是通过添加Authorize()为全局过滤器,然后授予对一些操作的访问权限,而不是限制对特定操作的访问,而是限制对所有操作的访问使用该属性选择操作AllowAnonymous()以充当不需要保护的操作的白名单。(如登录、注册等)。

全球.asax

protected void Application_Start()
{
    filters.Add(new AuthorizeAttribute());
}

AccountsController.cs

[AllowAnonymous]
public ActionResult Login()
{
    //Perform login...
}

然后你的web.config就只有这个

<authorization>
    <allow users="*" />
</authorization>
于 2013-02-13T14:27:40.100 回答
0

默认情况下,您应该转到控制器的Register()操作方法Account

// GET: /帐户/注册

根据您的 web.config:尝试将其添加到 web.config 之前的<system.web>标记。

 <location allowOverride="true" path="Account/Register">
    <system.web>
      <authorization>
        <allow users="?" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
于 2013-02-13T12:01:44.880 回答
0

对 Nick Albrecht 的 +1,但我发现“过滤器”有歧义,所以我不得不进一步挖掘。

实际上,这段代码似乎 filters.Add(new AuthorizeAttribute()); 属于 App_Start

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeTokens.AuthorizeWithMessage());
    }
}

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)在 Application_Start 中调用。

于 2019-11-29T17:55:15.297 回答