由于IIS 6.1设置,正在部署的每个应用都有一个别名,并且会对URL产生影响。在Visual Studio的开发服务器中,URL如下所示:
但是在部署到IIS之后:
正如您所看到的,网址中添加了appname
。部署后,所有Ajax调用都会变得不正确。我必须创建一个isIIS
变量并手动为其赋值,以使其起作用:
var isIIS = true; // set to false if runs locally;
window.appAlias = (isIIS) ? '/'+window.location.href.split('/')[3] : '';
在我的Ajax电话中:
$.post( window.appAlias + webUrl, {} , callback );
与GET调用相同,我必须在window.appAlias
前加上。有没有办法动态检测服务器是IIS还是Visual Studio开发服务器?我理解@Uri.Content("~/controller/action")
但我没有在Razor视图上编写JavaScript。
我正在使用Visual Studio 2012,目标框架.NET 4.5,MVC 4和jQuery 1.9.2进行开发。 IIS应用程序池具有.NET 4.0。
修改
这是我的临时解决方案:在_Layout.cshtml
中添加全局值:
Object.assign({
action1: '@Url.Content("~/controller/action1")',
action2: '@Url.Content("~/controller/action2")'
}, window);