MVC3部署到目录,url问题

时间:2013-05-13 17:50:02

标签: c# asp.net .net asp.net-mvc asp.net-mvc-3

我有一个mvc3网络应用程序,它将被删除到一个网站的目录。应用程序的地址似乎是http://wwww.xx.com/aopo/。 aopo是目录的名称。在部署之后,我发现js文件中的url不再起作用。因为我用硬编码网址编写了js代码,就像是

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

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

3 个答案:

答案 0 :(得分:3)

我相信您需要更改您对此的网址引用:

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

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

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

然后在你的剧本中:

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

Rgarding:

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

我明白了,但你需要使用正确的帮助方法来考虑在虚拟目录下运行,所以我建议咬住子弹并以正确的方式修复它。

答案 1 :(得分:2)

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

在布局中设置网址前缀(在公共位置),例如

<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挂钩中的前缀并更改网址。

$(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()方法。

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

希望这会有所帮助。

答案 2 :(得分:1)

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

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