MVC 3 - FormsAuthentication - 无法访问我的登录操作

bug*_*ixr 3 razor c#-4.0 asp.net-mvc-3

我正在使用MVC 3和FormsAuthentication:

<authentication mode="Forms">
  <forms loginUrl="~/Account/" timeout="2880" />      
</authentication>
Run Code Online (Sandbox Code Playgroud)

我的帐户/索引页面显示一个登录页面,然后使用Jquery,它会发送一个帖子到帐户/登录来验证用户.这是我处理它的AccountController动作:

[HttpPost]
[Authorize(Users = "*")]
public ActionResult Login(string userName, string password) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

发布的Jquery:

$.post("/account/login", {
                "userName": $("#userName").val(),
                "password": $("#password").val()
            }, function (data) {
...});
Run Code Online (Sandbox Code Playgroud)

以上所有工作,但现在我想限制对网站的一般访问,所以我把它添加到我的根web.config:

<authorization>
  <deny users="?" />      
</authorization>
Run Code Online (Sandbox Code Playgroud)

为了尝试允许访问帐户控制器,我添加了这个:

<location path="~/Account">
<system.web>
  <authorization>
    <allow users="*"/>
  </authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)

这是我的问题.我可以查看登录页面(帐户/索引),但我无法提交到帐户/登录.当我通过Fiddler观察正在发生的事情时,我会在发布到该页面时从服务器返回此文本:

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/?ReturnUrl=%2faccount%2flogin">here</a>.</h2>
</body></html>
Run Code Online (Sandbox Code Playgroud)

似乎当我将"〜/ Account"添加到完整的授权用户列表时,它实际上并不像在非mvc项目中那样工作.在MVC 3中有没有特殊的方法呢?

Tim*_*mbo 6

控制器的路径通常不作为相对路径引用.你应该只能说location ="Account",例如

<location path="Account">
Run Code Online (Sandbox Code Playgroud)

不能确定这是你的问题,因为我现在无法测试它,但它可能是......