WebAPI的AngularJS资源URL

时间:2014-01-28 09:22:45

标签: asp.net-mvc angularjs url asp.net-web-api angular-resource

我使用ASP.NET MVC 5创建了一个网站。在这个网站中,我使用AngularJS创建了一个“小型SPA”。 要获取/发布数据,我使用Web API(默认路由)。我使用子文件夹托管我的网站,因此我的网址看起来像 www.mydomain.com/MyApp.Web / 。当我尝试为资源服务创建URL时,我使用像“/ api / controllerName”这样的字符串,但当angular获取/发布到服务器时,它会省略子文件夹(MyApp。 Web)在URL中,实际上它获取/发布到URL,如 www.mydomain.com/api/controllerName 。 如何在URL中创建angular include子文件夹?

2 个答案:

答案 0 :(得分:2)

与达林的答案相似...... 在index.html文件中声明全局变量:

<script>
    var rootUrl = '@Url.Content("~/")';
</script>

然后创建一个服务,它将成为标准$ http的包装器。这个包装器在使用时可以检查传递的url是否以“〜”开头(例如你熟悉.NET),并通过组合传递的url和rootUrl来构造完整的url。

答案 1 :(得分:1)

  

如何在URL中创建angular include子文件夹?

永远不会硬编码应用程序中的url,而是使用服务器端url helper来生成它:

<script type="text/javascript">
    var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "controllerName" })';
    $.post(url, { foo: 'bar' }, function(result) {
        ...
    });
</script>

或者,您可以使用此帮助程序,以便在SPA的某些DOM元素中嵌入正确的URL。假设您是AJAX化锚。您只需在服务器上生成正确的URL:

<a href="@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "controllerName" })" id="mylink">Click me</a>

然后在你单独的js文件中:

$('#mylink').click(function() {
    $.post(this.href, { foo: 'bar' }, function(result) {
        ...
    });
    return false;
});

注意网址永远不会在任何地方进行硬编码。它保证是正确的,因为它是由服务器端url帮助程序生成的,考虑到您的路由配置和任何可能的虚拟目录。