我想我的 MVC 路由可能有点麻烦。请注意,我正在使用带有 Razor 视图的 ASP.NET MVC 4。
我的路线注册如下:
routes.MapRoute(
"Person",
"Person/Show/{uniqueId}",
new { controller = "Person", action = "Show", uniqueId = "" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
我的 PersonController 实现如下:
[HandleError]
public class PersonController{
public ActionResult Show(string uniqueId)
{
//get data from database
var personData = GetPersonDataFromDatabase(uniqueId);
return View("PersonView", new PersonViewModel(personData));
}
}
这应该显示具有 _LayoutContent.cshtml 布局的 PersonView.cshtml,而后者又具有 _Layout.cshtml 布局。
不幸的是,我无法看到该页面....除非我已登录。而且我不知道为什么会有所不同...
当我在未登录时尝试加载页面时,我被发送到此页面:
http://mymachine:8083/?ReturnUrl=%2fPerson%2fShow%2fvXDwucay
当我使用 Fiddler 查看正在发生的事情时,我可以看到发生了以下情况:
- 302, HTTP, mymachine:8083, /Person/Show/vXDwucay
- 200, HTTP, mymachine:8038, /?ReturnUrl=%2fPerson%2fShow%2fvXDwucay
对于 HTTP 302,我可以看到它返回以下内容:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/?ReturnUrl=%2fPerson%2fShow%2fvXDwucay">here</a>.</h2>
</body></html>
有人可以指出可能导致此问题的正确方向吗?我觉得奇怪的是,登录会导致路由正常工作。我确定我一定是在做一些非常简单的错误……或者我没有在正确的地方寻找问题。