5

我在我的服务器中的虚拟目录中部署了一个 MVC 应用程序,例如:

http://localhost/myapp/

其中“myapp”是虚拟目录

在我的登录视图中,位于

"http://localhost/myapp/user/login", 

我使用 重定向到索引RedirectToAction("Index", "Home"),似乎应用程序尝试重定向到

"http://localhost/home/index" 

代替

"http://localhost/myapp/home/index".

当应用程序位于 IIS 网站的根目录中时,它可以工作,但在给定的情况下不能工作。

有没有办法配置应用程序根,我错过了?

设置:Microsoft Visual Studio Express 2012 for Web、Windows 7 下的 IIS 7、应用程序池 ASP .NET v4.0

4

2 回答 2

2

我对这样做有 99% 的信心:

return RedirectToAction("Index", "Home")

是应用程序根目录相对意味着它应该重定向到您所在的应用程序,而不管虚拟目录设置或应用程序所在的位置。我的意思是想想噩梦,否则每次将应用程序移动到不同的虚拟目录时,都需要更新 global.asax 或 web.config 文件???荒谬的!我们的设置与您的设置相同,并且我们对“应用程序跳跃”没有任何问题。

您确定是 RedirectToAction 造成的吗?可能是你有类似的东西:

@Url.Content("/Home/Index")

在这种情况下,您会遇到此问题,您可以通过以下方式轻松解决此问题:

@Url.Content("~/Home/Index")

〜符号使其应用程序根相对...

于 2013-08-06T15:41:56.537 回答
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博客中有关路由的更多信息

于 2013-08-06T15:24:42.223 回答