Trong thông thường AccountController
trong ứng dụng MVC3 của tôi, nếu returnUrl
được đặt (trong trường hợp của tôi, tôi đặt thủ công), nó sẽ gọi Redirect(returnUrl)
.Chuyển hướng (relativeUrl) chuyển hướng đến đường dẫn sai trong IIS
Giả sử URL trả lại của tôi là /Admin/HealthCheck
(thực sự là). Khi tôi đang gỡ lỗi, tôi nhận được một URL như http://localhost:3279/Admin/HealthCheck
từ cuộc gọi chuyển hướng.
Sau đó, tôi đã triển khai ứng dụng của mình tới http://localhost/Test
. Trong trường hợp này, Redirect(returnUrl)
chuyển hướng tôi đến http://localhost/Admin/HealthCheck
và không dự kiến http://localhost/Test/Admin/HealthCheck
.
Điều gì đang xảy ra ở đây? Làm thế nào để sửa lỗi này (nếu nó có thể sửa chữa được)?
Dưới đây là đoạn trích từ Tài khoản MVC3 (tiêu chuẩn); bạn có thể thấy nơi tôi nhận được URL trả về từ chuỗi truy vấn (ví dụ: http://localhost/Test/LogOn?ReturnUrl=/Admin/HealthCheck
, mặc dù URL được mã hóa).
[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.");
}
}
Quay lại đầu trang Làm thế nào tôi có thể làm điều đó? Có vẻ như cách tiếp cận của bạn sẽ là lưu trữ tên bộ điều khiển, tên hành động và các thông số khác và sử dụng nó trong 'Url.Action'. Điều đó có vẻ không đúng. – ashes999
@ ashes999, nếu người dùng cố gắng truy cập một trang được bảo vệ, anh ta gõ địa chỉ trang này vào thanh địa chỉ, phải không? Và khi ứng dụng của bạn được triển khai trong IIS, anh ta gõ '/ Test/Admin/HealthCheck' thay vì'/Admin/HealthCheck', phải không? Bởi vì nếu anh ta gõ '/ Admin/HealthCheck', anh ta sẽ nhận được 404 từ IIS, phải không? Trong trường hợp này mọi thứ hoạt động như mong đợi. Tôi không hiểu vấn đề của bạn là gì. –