限制匿名访问ASP.Net MVC站点的问题

时间:2009-02-14 06:20:53

标签: asp.net-mvc authorization

每当我在MVC网站中限制匿名访问时,我都会收到404错误:

  '/'应用程序中的服务器错误。     无法找到该资源。     说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址并制作>确保它拼写正确。

     

请求的网址:/帐户/登录

我刚刚第一次玩MVC (RC1 Refresh),在让我退出的会员提供商工作后,我想锁定网站以防止匿名访问。我尝试使用web.config的传统方式:

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

但即使我明确允许匿名访问登录页面,也会出现上述错误。

我还尝试了Scott Gu's blog中提到的技术,并通过在HomeController中添加[Authorize]属性来保护About页面

[Authorize]
public ActionResult About()
{
    return View();
}

但在我尝试访问该页面时遇到了同样的错误。

我甚至尝试在另一台机器上进行全新安装。

那么如何在ASP.Net MVC RC1 Refresh中启用授权?

2 个答案:

答案 0 :(得分:7)

默认的Web.Config包含错误。它有:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login"/>
</authentication>

这应该是:

<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn"/>
</authentication>

(请原谅我回答我自己的问题,但是我花了很长时间才发现这一点,并且无法通过Google或SO找到任何线索。如果已发布,请随时关闭)。

答案 1 :(得分:0)

我不建议使用表单身份验证。

而是使用中间件管道。

public void ConfigureAuth(IAppBuilder app)
{
    // Enable the application to use a cookie to store information for the signed in user
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });
}

当然,你需要从web配置中删除formsauthentication模块并使用[Authorize]关键字