使用Javascript找出Web应用程序的主路径

时间:2015-01-09 15:42:30

标签: javascript c# jquery razor

我有一个使用C#,HTML和Javascript的.NET MVC5应用程序。

我需要知道主机的链接,以便我可以将特定文件夹中的特定文件发送给用户。

在我的本地计算机中,当我测试和开发应用程序时,应用程序使用的路径如下:

localhost:1234/Home/Scripts/myScript.js

但是,在实际部署服务器中,路径会更改:

www.superhost.com/Apps/MyApp/Home/Scripts/myScript.js

当我点击按钮时,我正在尝试使用以下JQuery将此文件发送给用户:

$("a.btn.btn-default").click(function () {  
        download("/Scripts/myScript.js");  //download is a personal function, unimportant
        return false; //prevent browser defualt behavior
    });

问题是,当我单击按钮时,我会在consolo中遇到一个错误 - 404错误,这意味着服务器找不到该文件。

实际上服务器正在路径" /Scripts/myScript.js"上搜索文件,但该文件位于" Apps / MyApp / Home / Scripts / myScript.js&# 34 ;.

如何让我的javascript足够智能以找出正确的路径?

3 个答案:

答案 0 :(得分:3)

我经常使用的一个解决方案是使用以下内容将站点根URL注入页面:

<body data-root="@Url.Content("~/")">

在运行时转换为实际的网站基础网址。

然后使用以下命令从所有jQuery代码中使用该注入值:

var root = $('body').data("root");

您可以简单地将其添加到任何相对网址,以使其正常工作:

 $("a.btn.btn-default").click(function () {  
    download(root + "Scripts/myScript.js");  //download is a personal function, unimportant
    return false; //prevent browser defualt behavior
 });

注意:此方法在路由更改的情况下工作:

例如/ vs /home/index/ vs /home/这些页面都相同,但网址不同

答案 1 :(得分:1)

从下载路径中删除前导/

您实际上不需要绝对路径(并且知道服务器的主文件夹)来访问文件,从您调用下载的页面相对地定位它。

注意:如果您使用的是页面相对路径,则必须确保不要移动执行下载脚本的页面。

答案 2 :(得分:0)

我总是在我的布局中使用下一个代码:

<script type="text/javascript">
   var rootUrl = "@Url.Content("~/")";
</script>

当我需要它时,我会使用例如:

 $("a.btn.btn-default").click(function () {  
    download(rootUrl + "Scripts/myScript.js");  //download is a personal function, unimportant
    return false; //prevent browser defualt behavior
 });