我有一个使用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足够智能以找出正确的路径?
答案 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
});