【问题标题】:jquery GET to location in virtual directory AND behind a load balancer (mvc web api)jquery GET到虚拟目录和负载均衡器后面的位置(mvc web api)
【发布时间】:2025-12-05 22:30:01
【问题描述】:

我在这里描述了同样的问题: Javascript in Virtual Directory unaware of Virtual Directory

但是使用隐藏字段或服务器端生成的 json 设置对象的建议解决方案对我不起作用,因为服务器端实际上并不知道它自己的 url。如果我执行 Url.Content("~") 我只会获得运行代码的其中一台机器的 ip,因此我永远无法在 javascript 中使用该路径。它还返回一个 http url 而不是外部的 https url。

所以更准确地说: https://myhost.com/myapp/ /* 这是我的代码运行的地方 */

我可以在 jquery 中使用相对路径(例如:$.get('api/controller')),但如果用户使用 'https://myhost.com/myapp'(所以没有尾部斜杠),应用程序将无法工作。 (实际上页面已加载,但由于缺少斜杠而导致回调失败)

我可以使用绝对网址,但服务器端代码不知道实际网址...

有没有办法让 javascript 返回带有斜杠的虚拟目录的完整绝对路径(即使浏览器地址中没有斜杠)?

谢谢

【问题讨论】:

    标签: jquery asp.net-mvc asp.net-web-api


    【解决方案1】:

    好的,知道了。它现在是其他相关问题中给出的两个较早答案的组合:

    我一直使用相对路径,我也使用设置 json,它将保存包含虚拟目录的相对路径:

    <script type="text/javascript">
        var settings = {
            baseUrl: '@Url.Content("~")'
        };
    </script>
    

    这将解决为:

    <script type="text/javascript">
        var settings = {
            baseUrl: '/MyApp/' /* <-- always has trailing slash */
        };
    </script>
    

    我只需要在我所做的每个 jQuery $.get 操作前加上前缀。

    如果有人有更好的建议,我非常愿意接受建议!

    【讨论】: