返回URL不适用于Live服务器vs开发服务器

时间:2012-03-05 05:47:37

标签: asp.net-mvc asp.net-mvc-3

我有一个MVC3 Razor视图,其中包含一个需要用户登录的链接,其html如下所示:

<a href="Home/Login?returnUrl=/myprojname/Product/Index">

然后在homecontroller和视图中登录一个动作方法。其中将值发布到登录操作方法。

在post action方法中我检查returnurl是否为null然后重定向到该URL。在本地系统上,它返回到此地址

http://localhost:1235/myProjname/Product/Index

并且工作正常。但是当我将它上传到服务器(IIS 7)时,它返回到

http://domainname/myProjname/Product/Index

并给出404,因为那里没有'myProjname',如果我删除'myprojname',它可以在实时服务器上使用此URL

http://domainname/Product/Index

但为此我需要像这样改变href

<a href="Home/Login?returnUrl=/Product/Index">

在这种情况下,它不适用于具有URL的本地系统

http://localhost:1235/Product/Index

请建议解决方案

2 个答案:

答案 0 :(得分:2)

你是认真的吗?

好的,我们会一起玩。

解决方案是正确创建链接,而不是硬编码。

@Html.ActionLink("Login", "Home", new { returnUrl = Url.Action("Index", "Product") })

在旁注中,您可能不需要将returnUrl传递给操作。从动作方法本身的Request.UrlReferrer.AbsoluteUri中拉回来。

没有意义听起来粗鲁,但我强烈建议您前往http://www.asp.net/mvc并进行阅读/观看,然后继续进行。

答案 1 :(得分:1)

使用Url.ActionUrl.Content辅助方法将生成相对于应用程序根目录的URL,并避免这些问题。

此外,@Href("~/")将生成应用程序根目录的完整路径(从视图中)。