2

使用 ASP.Net WebAPI 和 javascript/jquery。

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

  $.GetJSON(apiUrl+"/"+myValue).done(function(data){more code here});

在我的开发环境中,这工作正常。但是当我将它移动到我们的测试服务器时,它变成了一个名为 MyApp 的子目录中的 Web 应用程序。有没有办法告诉 javascript 转到应用程序的根目录而不是站点的根目录?我想避免在该字符串的前面添加“/MyApp/”。

有什么谎言var test="~/api/myService/myMethod/"

4

1 回答 1

1

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

没有这样的代码。永远不要在 ASP.NET MVC 应用程序中对 url 进行硬编码。在处理 url 时,您应该始终使用帮助程序。因此,例如,您可以在布局中的全局变量中使用它:

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

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

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

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

酷,现在 AJAXify 吧:

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

看看您如何不再需要在您的 javascript 中对任何 url 进行硬编码?您只需使用 javascript 不显眼地增强 DOM 中已经存在的内容。这是由适当的 url 助手生成的,可确保根据您的路由定义创建正确的 url。通过这种方式,您可以在一个地方(无论您在哪里配置您的路线)更改您的路线模式,并且您无需担心您的视图。

于 2013-06-10T19:08:54.277 回答