【问题标题】:Best way to provide url to angular $http.get/.post向 Angular $http.get/.post 提供 url 的最佳方式
【发布时间】:2014-01-27 23:25:18
【问题描述】:

我在 MVC4 中使用 Angular。我想使用 $http.get() 从 javascript 调用 MVC 控制器方法。它需要一个网址(显然)。我希望这是一个相对路径,但我该怎么写呢?我的控制器位于 Controllers/Api/ExampleController 中。即使我将 javascript 文件移动到另一个位置,我也希望解析路径,这意味着我希望路径相对于应用程序根目录而不是 javascript 文件。我试过“~/Controllers/Api/ExampleControllerMethod”和“Controllers/Api/ExampleController/Method”。

【问题讨论】:

  • 如果你显示你的目录结构会更好。您是否尝试过使用“/Controllers/Api/ExampleControllerMethod”?
  • 不,我没试过。控制器目录位于我的 Web 应用程序的根目录中。
  • "/Controllers/Api/ExampleControllerMethod" 应该可以工作!
  • 不,那是行不通的——而且如果不知道要使用哪个控制器,它会如何工作?

标签: angularjs asp.net-mvc-4 url relative-path angular-http


【解决方案1】:

$location 服务确实提供来自 url 的信息。因此,您可以构建一些东西来使主机和端口动态化:

var url = $location.host() + '/Controllers/Api/ExampleControllerMethod';

来自文档:

**url: http://www.example.com/base/path?a=b#h**
$location.protocol() = http
$location.host() = www.example.com
$location.port() = 80
$location.path() = /path
$location.search() = {"a":"b"}
$location.hash() = h

【讨论】:

    【解决方案2】:

    感谢您的想法,但我一直在寻找这种东西:

    配置 WebApiConfig 以添加这样的路由(应该将其作为默认设置):

    config.Routes.MapHttpRoute(
                name: "ApiMethods",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
    

    所以现在我可以去 $http.get('api/{controller}/{method}')

    【讨论】:

    • 我做错了 $http.get('/api/v1/...') .. 第一个斜杠是不必要的,在更改为 $http.get('api/ v1/...') 它起作用了。不需要$location
    【解决方案3】:

    对我有用的是将 URL 提供为“/ControllerName/Action”(而不是“ControllerName/Action”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多