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

Find out home path of web app using Javascript

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

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

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

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
    });

问题是,当我单击按钮时,我在控制台中收到 erorr - 404 错误,这意味着服务器未找到该文件。

实际上服务器正在搜索路径“/Scripts/myScript.js”中的文件,但文件在"Apps/MyApp/Home/Scripts/myScript.js"中。

如何让我的 javascript 足够聪明以找到正确的路径?

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

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

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

然后您使用来自所有 jQuery 代码的注入值,使用:

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

您可以简单地将其添加到任何相关 URL 之前,以使它们正常工作:

 $("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/ 它们都是相同的页面,但不同 URLs

从您的下载路径中删除前导 /

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

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

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

<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
 });