我正在接管现有的ASP.NET MVC 5项目,以尝试理解MVC框架。我注意到,当用户没有登录,并且他试图访问某些网页时,它会自动将他重定向到登录屏幕。我相信这与Web.config文件中的以下内容有关:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
但是,即使用户未登录,某些网页也允许访问它们(并且不会如上所述重定向)。
所以我的问题是:我在哪里配置哪些网页会自动重定向到登录界面,哪些网页可以不经认证就可以访问?
答案 0 :(得分:5)
此article说明了如何使用表单身份验证执行此操作。配置的简短片段如下所示。默认情况下,default1.aspx可以访问。
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<!-- This section denies access to all files in this application except for those that you have not explicitly specified by using another setting. -->
<authorization>
<deny users="?" />
</authorization>
</system.web>
<!-- This section gives the unauthenticated user access to the Default1.aspx page only. It is located in the same folder as this configuration file. -->
<location path="default1.aspx">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
</system.web>
</location>
</configuration>
答案 1 :(得分:4)
您可以在控制器操作上设置[Authorize]
属性,该属性将要求用户获得授权,否则它们将被重定向到配置中指定的页面。您还可以指定访问操作所需的各个角色,或者需要对控制器上的所有操作进行授权,并明确关闭操作授权。
授权个人行为
public class HomeController: Controller
{
public string Index()
{
// Not authorized
}
[Authorize]
public string SecretAction()
{
// Authorized (redirects to login)
}
}
授权所有操作
[Authorize]
public class HomeController: Controller
{
public string Index()
{
// Authorized (redirects to login)
}
public string SecretAction()
{
// Authorized (redirects to login)
}
}
授权除一个以外的所有操作
[Authorize]
public class HomeController: Controller
{
public string Index()
{
// Authorized (redirects to login)
}
[AllowAnonymous]
public string PublicAction()
{
// Not authorized
}
}
更多信息:http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
答案 2 :(得分:0)
如果您正在做一些简单的事情(比如一两页公共内容),那么简单的解决方法就是:
Response.SuppressFormsAuthenticationRedirect = true;