限制对页面的访问,但不限制在ASP.NET MVC中启动页面

时间:2014-01-16 15:12:53

标签: asp.net forms-authentication

我正在构建一个ASP.NET MVC Web应用程序,我正在尝试限制对页面的访问。

我已经指定我想在我的Web.config中使用表单身份验证:

<system.web>
    ...
    <authentication mode="Forms">
        <forms loginUrl="~/login" timeout="20" protection="All" />
    </authentication>
    <authorization>
        <deny users="?" />
    </authorization>
    ...
</system.web>

这将拒绝访问所有页面,但我想公开一些页面。我也可以在Web.config中执行此操作:

<location path="about-us">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
<location path="contact-us">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>
…

这一切都很好。问题是起始页面,更准确地说是当用户转到“http://www.mydomain.com/”时,没有指定其他路径。如何指定此页面应该公开?

我尝试了一些变化,但是看起来没什么用。我总是收到错误:

没有路径

<location>
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

空路径

<location path="">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

<location path=".">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

斜线

<location path="/">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您无需在web.config中为MVC管理身份验证。尝试在Controller类和方法上使用[Authorize]属性:

[Authorize] // everything here requires auth
public class AdminController()
{
    public ActionResult Dashboard() { ... }
}

public class ReportController()
{
    [Authorize] // only this method requires auth
    public ActionResult SecretReport() { ... }

    public View PublicReport() { ... }
}

// everything here is accessible
public class HomeController()
{
    public ActionResult Index() { ... }

    public ActionResult AboutUs() { ... }

    public ActionResult ContactUs() { ... }
}

在ASP.NET MVC中,你可以使用[AllowAnonymous],它允许你在特定的方法上做到这一点

答案 1 :(得分:1)

起始页面只是您在RouteConfig中提供的默认控制器。因此,如果您使用默认值,则需要允许访问HomeControllerIndex()方法。在使用MVC和授权时,我发现this非常有价值。