我有一个Controller
有两个操作,Logon
没有任何修饰符,LogOn
有[HttpPost]
装饰符。
代码:
public ActionResult LogOn()
{
return View();
}
[HttpPost]
public ActionResult LogOn(string username, string password,
bool? rememberMe, string returnUrl)
{
AccountService client = new AccountService();
if (client.IsUserAllowedIn(username, password))
FormsAuthentication.SetAuthCookie(username, rememberMe ?? false);
return Redirect(returnUrl);
}
我遇到的问题是:当我尝试使用[Authorize]
装饰器ASP.NET MVC
访问某个方法时,我没有使用{{1}重定向到我的LogOn
操作装饰者。
出于测试目的,我创建了一个使用[HttpPost]
调用LogOn
的表单并且它有效。所以我想问题就在于我使用装饰器的方式。
我的Post
:
web.config
关于我做错什么的任何想法?
答案 0 :(得分:1)
我面临的问题是:当我尝试使用的方法访问方法时 [授权]装饰器ASP.NET MVC没有重定向到我的LogOn 使用[HttpPost]装饰器进行操作。
当然不会。根据基本定义,重定向意味着GET请求。您不可能期望您能够重定向到只能使用POST动词访问的控制器操作。那是不可能的。
除此之外,为什么您希望受保护的资源将您重定向到应该验证您的凭据的控制器操作。人们通常期望的是,当有人试图访问受保护资源时,他会被重定向到控制器操作,该操作将呈现用户可以输入其凭据的LogOn表单,将此表单提交给相应的POST操作以进行验证,如果他的凭据是有效的POST操作会发出一个表单身份验证cookie并将其重定向回返回URL,该URL指向他最初请求的受保护资源。