我有一个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中重写请求吗?
答案 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。