0

我有一个 mvc3 Web 应用程序,它将被部署到网站的目录中。该应用程序的地址看起来像http://www.xx.com/aopo/。aopo 是目录的名称。部署后我发现js文件中的url不再起作用。因为我已经用硬代码 url 编写了 js 代码,就像

$.ajax({url:"/employee/getemployee"})

在这种情况下,请求将被发送到http://wwww.xx.com/employee/getemployee而不是http://www.xx.com/aopo/employee/getemployee,并返回 404。js中有很多这样的代码。我不想修改js。有什么简单的方法可以让它工作吗?我可以在 global.asax.cs 中重写请求吗?

4

3 回答 3

3

我相信您需要将您的 url 引用更改为:

$.ajax({url:"@Url.Action("getemplotee","employee")"})

如果这是一个脚本文件,您可以将正确的 URL 写入页面上的元素并读取:

<div id='Main' data-url='@Url.Action("getemplotee","employee")' />

然后在你的脚本中:

$.ajax({url:$('#Main').data('url')})

关于:

There is lots of code in js like that. I don't want to modify the js

我理解,但是您需要使用正确的辅助方法来解决在虚拟目录下运行的问题,因此我建议您咬紧牙关,以正确的方式进行修复。

于 2013-05-13T17:59:01.757 回答
2

一个不太干净的解决方案可能是,

在布局中设置一个 url 前缀(在一个常见的地方),比如

<script type="text/javascript">
    @{
        string root = Url.Content("~/");
        if (root.EndsWith("/", StringComparison.Ordinal))
        {
            root = root.Substring(0, root.Length - 1);
        }
    }
    window.URL_PREFIX = '@root';
</script>

然后使用ajaxSend钩子中的前缀并更改 url。

$(document).ajaxSend(function (event, jqxhr, settings) {
    if (window.URL_PREFIX && settings.url.indexOf(window.URL_PREFIX)) {
        settings.url = window.URL_PREFIX + settings.url;
    }
});

注意:如果在全局选项设置为 false 的情况下调用 $.ajax() 或 $.ajaxSetup(),则不会触发 .ajaxSend() 方法。

它不是一个理想的解决方案,但在紧张的情况下可能会有所帮助。

希望这可以帮助。

于 2013-05-13T19:59:15.190 回答
1

不,那是不可能的。由于请求没有到达您的应用程序,您无法访问它,因此您无法重写它。

如果您可以控制根站点,则可以使用 IIS 重写模块来重写您网站的 URL。

于 2013-05-13T17:53:51.710 回答