我正在构建一个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>
有什么建议吗?
答案 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中提供的默认控制器。因此,如果您使用默认值,则需要允许访问HomeController
和Index()
方法。在使用MVC和授权时,我发现this非常有价值。