从开发到测试再到生产的API路径不同.我如何避免在部署之间进行更改

API path different from dev to test to prod. How do I avoid changing between deployments?

本文关键字:部署 何避免 之间 测试 开发 路径 API      更新时间:2023-09-26

. Net WebAPI和javascript/jquery.

我有以下JScript代码:var apiUrl = "/api/myService/myMethod/
  $.GetJSON(apiUrl+"/"+myValue).done(function(data){more code here});

在我的开发环境中,这可以正常工作。但是当我将它移动到我们的测试服务器时,它变成了一个web应用程序,位于名为MyApp的子目录中。有没有一种方法告诉javascript去应用程序的根,而不是网站的根?我想避免在字符串前面加上"/MyApp/"

Something lie var test="~/api/myService/myMethod/"

我有以下JScript代码:var apiUrl = "/api/myService/myMethod/

不要有这样的代码。永远不要在ASP中硬编码url。NET MVC应用程序。在处理url时应该始终使用helper。例如,你可以在Layout的全局变量中加入这个:

<script type="text/javascript">
    var apiUrl = '@Url.Route("DefaultApi", new { controller = "values", httproute = "" });';
</script>

你无疑注意到httproute = ""路由参数我用来指示URL助手使用Web API路由,而不是你的MVC路由(这是两个完全不同的东西)。

但在大多数情况下,你甚至不需要它。传递给此$.getJSON函数的url可以是DOM的一部分。例如,您永远不会像在野外那样调用$.getJSON函数。通常调用它是为了不显眼地ajax化锚点或表单。所以url可能已经是DOM的一部分了。例如,假设您想要ajax化一个锚。很好,继续写这个锚指向正确的url:

@Html.RouteLink(
    "click me", 
    "DefaultApi", 
    new { httproute = "", controller = "values", id = "123" }, 
    new { id = "mylink" }
)

很酷,现在把它ajax化:

$(function() {
    $('#mylink').click(function() {
        $.getJSON(this.href, function(result) {
            alert('success');
        });
        return false;
    });
});

看到你如何不再需要硬编码任何url在你的javascript?您只需使用javascript不显眼地增强DOM中已经存在的内容。这是由适当的url帮助器生成的,它能确保根据你的路由定义创建正确的url。这样,你就可以在一个地方(无论你在哪里配置你的路由)改变你的路由模式,你永远不需要担心你的视图。