2011-11-17 68 views
1

这很奇怪。我为MVC3应用程序调用了一个虚拟目录设置(为了这个问题),我将调用'foobar'。完整的URL这个网站是:MVC3和IIS6 RedirectToAction重定向到错误的URL

http://localservername.domainname.com/foobar 

在我的注册表,我有一个应该重定向到登录后的应用程序的主/主页的下面一行。

return RedirectToAction("Index", "Home"); 

然而,这条线执行时,我重定向到错误的位置 - 因此而不是重定向我回:

http://localservername.domainname.com/foobar 

我重定向回:

http://localservername.domainname.com/foobar/foobar 

哪一个当然会给我一个资源找不到的错误。此外,在我的意见的任何链接似乎做相反的 - 例如,如果我有这样一个链接:

<a href="/WidgetSearch">Widget Search</a> 

我希望下面的URL打开:

http://localservername.domainname.com/foobar/WidgetSearch 

相反,我得到重定向到

http://localservername.domainname.com/WidgetSearch 

哪个当然也得到我资源找不到错误。我从来没有遇到过这种行为。我已经了解了基本和高级设置并创建了一个新的应用程序池。 Fiddler也向我展示了(当然)上面列出的URL返回404响应。

任何建议将不胜感激。 谢谢!

+0

如果你有比其它任何途径默认路线,请出示。 – counsellorben

+0

您是否设法解决您的第一个问题?我面临同样的问题。我的路线是routes.MapRoute( “BarCodeScan”,//路线名称 “{controller}/{action}/BarCode/{* BarCode}”,//带参数的网址 new {controller =“Home”,action = “ProcessBinBatchBarCode”,BarCode = string.Empty} //参数默认值 ); –

回答

1

第一个问题不应该真的发生。 RedirectToAction应该考虑到你的虚拟目录路径(你有没有硬编码一个额外/foobar到你的路线设置吗?)。

第二个问题与MVC无关,只是您使用的是直接指向服务器根目录的vanilla HTML链接(这就是/blah暗示的含义)。你应该改变你的链接来使用MVC helper方法来生成URL,以确保它为你添加虚拟目录。所以下面的一个(第一个可能是最好的办法,除非你需要大量定制的锚标记的样子):

@Html.ActionLink("Widget Search", "Index", "WidgetSearch") 

<a href="@Url.Action("Index", "WidgetSearch")">Widget Search</a> 
+0

感谢您的回答,我会在今天晚上更新链接。但是,第一个让我难住 - 一个真正的头部划痕。 –

+0

@AndyEvans - 我唯一能想到的就是你的路线设置......你的路线注册是什么样的?除了正常默认的“{controller}/{action}/{id}”'之外,你还有其他什么吗?在代码中的任何地方都不应该提及虚拟目录'/ foobar',因为它应该由底层框架来处理。 – Alconja

+0

你是对的。没有在我的项目/ foobar出现的地方。这是加重的。 –