我有一个ASP.NET MVC 4应用程序,它作为我的ServiceStack AppHost的主机。一切都在开发中工作正常,但在我的第一次测试部署中,我意识到我忽略了在我的环境(开发/测试/登台/部署)之间处理我的AJAX URL值的差异。我的应用程序实际上只是一个基于Knockout的SPA,可以调用ServiceStack,所以MVC只提供托管。
所以我的javascript有这个:
self.DoSomething = function (event) {
// here is my problem. the service url is
// specific to the current environment
var service_url = '/api/some_method';
$.ajax({
url: service_url,
dataType: 'json',
type: 'POST',
success: function (data) {
// do something
}
})
};
在一个'正常'的ASP.NET MVC应用程序中,我正在调用控制器操作,我会这样做:
var service_url = '@Url.Action("MyControllerAction", "MyController")'
到目前为止,我所拥有的最佳解决方案是:
var service_url = '@Url.Content("~")api/some_method';
它工作正常,但它看起来比我想象的单行代码更丑。在AJAX调用开始失败之前,它看起来就像是在没有注意的情况下搞砸了......
我倾向于把它包装成一个js帮助文件,可以从任何类似的页面引用,但是ras引擎无法解析js帮助器。
有没有人知道是否有'最佳实践'的方法来做到这一点?