路由是任何ASP.NET MVC 应用程序的核心概念之一。 MVC 应用程序的 URL 是您的 Application root URL 后跟 Controller 名称和 Action 的组合,已向其发出请求,例如
http://localhost:55875/{controller}/{action}/{optional parameters}
您可能选择了具有Account Controller 和Authorization 成员资格提供商的新项目。正如其他成员所提到的,Authorize 属性可能是您被重定向到logon 页面的主要原因。
来自Authorize attribute的文档:
如果未经授权的用户尝试访问标有
Authorize 属性,MVC 框架返回 401 HTTP 状态
代码。如果站点配置为使用 ASP.NET 表单身份验证,
401 状态码导致浏览器将用户重定向到
登录页面。
在浏览器中,每当您在地址栏中按回车键时,浏览器总是向服务器发出GET 请求资源。
这就是可能发生的事情。您的 Admin Controller 或其 Index() 方法都装饰有 [Authorize] 操作过滤器属性,例如
public class AdminController : Controller
{
///<summary>
/// This view will open whenever you make a HTTP GET request to your Admin
/// controller without providing any action method name in request explicitly.
/// Because it is decorated with Authorize attribute, any user who has not logged in
/// will be redirected to the login page...
///</summary>
[Authorize]
public ActionResult Index()
{
return View();
}
}
您可能想知道为什么应用程序重定向到登录视图?
这是因为默认情况下,此操作已在您的 web.config 文件中的应用程序中设置。
<authentication mode="Forms">
<forms loginUrl="~/Account/Logon"/>
</authentication>
MVC 利用内置身份验证逻辑的强大功能并将用户重定向到已在loginUrl 下设置的视图。
尝试删除 [Authorize] 操作过滤器进行更改,看看会发生什么。最后,由您的业务逻辑来决定您只需要授权或匿名访问哪些视图。
不过,您也可以查看AllowAnonymous attribute。它允许您跳过特定 contoller 或 action 的授权。
[Authorize]
public class AdminController : Controller
{
///<summary>
/// Skips Authorization..
///</summary>
[AllowAnonymous]
public ActionResult Index()
{
return View();
}
///<summary>
/// Only allows authorize access...
///</summary>
public ActionResult Secure()
{
return View();
}
}
您也可以自定义/覆盖这些操作过滤器的行为。
注意,[Authorize] 已添加到 controller 本身,如果您选择了具有互联网和会员提供商的项目,这些提供商将在此授权范围内执行所有操作,除了带有 [AllowAnonymous] 过滤器(如果存在)的操作。
This article has good overview of Action filters in MVC.