重写URL时,@ Url.Content和@Href无法正常工作

时间:2016-09-19 10:13:38

标签: asp.net asp.net-mvc

ASP.NET MVC中的@ url.Content和@Href帮助器方法在一种情况下无法正常工作。这是在localhost上的情况,它在IIS而不是IIS Express上托管,因此URL看起来像是http://localhost/MyApp/index-hr而不是http://localhost:12345/index-hr。这就是我调用脚本的方式:

   <script src='@Href("~/Scripts/toastr/toastr.js")' type="text/javascript">       </script>

我也尝试过:

    <script src='@Url.Content("~/Scripts/toastr/toastr.js")' type="text/javascript"></script>, 

     <script src='~/Scripts/toastr/toastr.js' type="text/javascript"></script>

除了URL类似于http://localhost/MyApp/index-hr之外的情况,它会解析Url很棒。我的网址/index-hr会被重写并映射到控制器Home和操作HomeIndex。我注意到它在URL为http://localhost/MyApp/Home时解析正常,因此可能因为额外的斜杠(当应用程序托管在本地IIS上时)而没有问题,但是因为URL被重写了。其他带有重新加载网址的网页加载toast.js确定但是它们有更深层次的链接,但在这种情况下它会将toast.js解析为此网址:http://localhost/Scripts/toastr/toastr.js,这会导致404 ofcourse。它应解决为:http://localhost/MyApp/Scripts/toastr/toastr.js

1 个答案:

答案 0 :(得分:0)

我不确定我是否找到了解决办法,或者只是解决了这个问题而且搞砸了其他事情,但正如建议here我写的这段代码是global.asax:

   protected void Application_BeginRequest()
    {

        Context.Items["IIS_WasUrlRewritten"] = false;
    }

这里说的是,在ASP.NET网页Razor V3中使用IIS URL重写,Tilde(〜)符号映射到原始URL。如果URL将来无法使用,请解释:

  

出现此问题是因为URL中波形符号的行为是   在Web页面Razor V3中更改了与ASP.NET MVC的一致性。在   ASP.NET MVC,Url.Content方法中的代字符表示法   Html.ActionLink方法生成原始URL,而不管它是什么   IIS URL重写规则。

     

但是,在网页Razor V2中,URL中的波形符号映射到   启用IIS URL重写模块时重写的URL。对于   例如,当content.asp.net下的请求被重写为   asp.net/content/下的URL,href属性   被解析为/ content / book /。在网页Razor V3中,相同的href   属性被翻译成/ book /,这是原始的URL   浏览器。

在razor v2中比在razor v3中更好?