В обычном AccountController
в моем приложении MVC3, если установлено returnUrl
(в моем случае я установил его вручную), оно вызовет Redirect(returnUrl)
.
Предположим, что мой обратный URL-адрес /Admin/HealthCheck
(это действительно так). Когда я отлаживаю, я получаю URL как http://localhost:3279/Admin/HealthCheck
от перенаправления вызова.
Затем я развернул свое приложение на http://localhost/Test
. В этом случае Redirect(returnUrl)
перенаправляет меня на http://localhost/Admin/HealthCheck
, а не ожидаемый http://localhost/Test/Admin/HealthCheck
.
Что здесь происходит? Как мне это исправить (если это поправимо)?
Ниже приведен фрагмент из (стандартного) MVC3 AccountController; Вы можете увидеть, где я получаю URL-адрес возврата из строки запроса (например, http://localhost/Test/LogOn?ReturnUrl=/Admin/HealthCheck
, хотя и закодированный URL-адрес).
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
returnUrl = Request.Params["ReturnUrl"];
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}