ASP .NET MVC RedirectoToAction忽略所在的应用程序

时间:2013-08-06 15:07:41

标签: asp.net-mvc iis-7

我在我的服务器中部署了一个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

2 个答案:

答案 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

中路由的更多信息