MVC站点与虚拟应用程序路由

时间:2011-10-04 18:36:25

标签: asp.net-mvc-3 iis-7 tfs

我们使用TFS将我们的应用程序部署到多个环境(Dev,QA,Prod)。很简单,我们的Dev和QA环境都有像dev.domain / APPLICATION和qa.domain / APPLICATION这样的URL。因此,我们有一个站点,每个应用程序都是虚拟应用程序。

但是在生产中,他们希望每个应用程序都是自己的站点,例如APPLICATION.domain.com ...... Grrr!在Visual Studio中,应用程序的属性配置为“虚拟路径”。我不确定应该如何处理这个问题。该应用程序包含的代码如:<a href='/APPLICATION/File/Download?id=<#= PkFileId #>'><#= Name #></a>,因为它不在虚拟应用程序中而导致生产中出现问题。

我可以创建一个名为application.domain.com的站点,其中包含一个空目录。然后添加一个虚拟应用程序,但是我必须在站点的根目录中放置一个重定向才能转到虚拟应用程序。或许我可以以某种方式配置应用程序?不确定我的选择是什么......任何建议都表示赞赏!

1 个答案:

答案 0 :(得分:2)

  

该应用程序包含以下代码:

     

<a href='/APPLICATION/File/Download?id=<#= PkFileId #>'><#= Name #></a>

ASP.NET MVC应用程序不应包含这样的代码(其中url是硬编码的代码)。在ASP.NET MVC应用程序中,您应始终使用HTML和Url帮助程序:

@Html.ActionLink(
    Model.Name, 
    "Download", 
    "File", 
    new { id = Model.PkFileId }, 
    null
)

这样可以肯定的是,无论您的路由如何配置,或者您的应用程序托管在哪个虚拟目录下,它都应该有效。


更新:

在您发表评论后,您似乎正在使用Telerik Grid。在这种情况下,您可以尝试沿线生成适当的锚点:

columns
    .Bound(x => x.PkFileId)
    .ClientTemplate(
        Html.ActionLink(
            "<#= Name #>", 
            "Download", 
            "File", 
            new { id = "<#= PkFileId #>" }, 
            null
        ).ToString()
    )
    .Title("");