我在我的服务器中部署了一个MVC应用程序,位于虚拟目录中,如:
http://localhost/myapp/
“myapp”是虚拟目录
在我的登录视图中,位于
"http://localhost/myapp/user/login",
我使用RedirectToAction("Index", "Home")
重定向到索引,似乎应用程序尝试重定向到
"http://localhost/home/index"
而不是
"http://localhost/myapp/home/index".
当应用程序位于IIS网站的根目录中但在给定情况下不起作用时,该应用程序可以正常工作。
有没有办法配置应用程序root,我错过了?
设置:Microsoft Visual Studio Express 2012 for Web,Windows 7下的IIS 7,应用程序池ASP .NET v4.0
答案 0 :(得分:2)
我99%肯定做:
return RedirectToAction("Index", "Home")
是应用程序根相对意味着它应该重定向到您所在的应用程序,而不管虚拟目录设置或应用程序所在的位置。我的意思是想到噩梦,否则你每次将应用程序移动到另一个虚拟目录时都需要更新global.asax或web.config文件???荒谬!我们拥有相同的设置,我们对“app hopping”没有任何问题。
您确定RedirectToAction导致此问题吗?可能是你有类似的东西:
@Url.Content("/Home/Index")
在这种情况下,您会遇到此问题,您可以通过执行以下操作轻松解决此问题:
@Url.Content("~/Home/Index")
〜符号使它成为应用程序根相对...
答案 1 :(得分:0)
这是正确的功能。 MVC默认将路径计算为控制器/操作。
如果您希望这样做,则需要在Global.asax
:
//this is your new route which needs to be ABOVE the detault
routes.MapRoute(
// Route name
"myapp_Default",
// Url with parameters
"myapp/{controller}/{action}/{id}",
// Parameter defaults
new { action = "index", id = UrlParameter.Optional });
//This is the default route that should already be there.
routes.MapRoute(
// Route name
"Default",
// Url with parameters
"{controller}/{action}/{id}",
// Parameter defaults
new { action = "index", id = UrlParameter.Optional });
有关在scott gu的blog
中路由的更多信息