AngularJS无法从工厂调用APIcontroller

时间:2015-02-23 14:04:09

标签: angularjs factory asp.net-apicontroller

我有问题从我工厂的API控制器获得响应。

我收到错误找不到404页

我在.js-file中找到了正确的HTML-document,路由似乎没问题。

App.js:

module.factory('userFactory', function($http) {
return {
    getFormData: function(callback) {
        $http.get('/api/GetMessage').success(callback);
    }
  }
});

module.controller("messageController", function($scope, userFactory) {
  $scope.getMessage = function() {
    userFactory.getFormData(function(results) {
        $scope.text = results;
    });
  }
});

API-控制器:

using System.Web.Http;

namespace kittyChatt.Backend.Controllers {
public class GetMessageController : ApiController
{
    public object Get()
    {
        object obj = "hello world";        
        return obj;
    }
  }
}

我希望你的世界显示我在视图中点按了一个按钮。

查看:

   <div>
     <button ng-click="getMessage()">Get my message</button>
      <p>{{text}}</p>
   </div>

Plz帮忙!

2 个答案:

答案 0 :(得分:2)

return {
   getFormData: function(callback) {
      $http.get('/api/GetMessage/Get').success(callback);
   }
}

你忘了告诉你想要打电话给你的控制器。

默认情况下,操作是HttpPost(是的,我知道,我写的是HttpGet,这是asp.net mvc中的情况),但是我建议你仍然用正确的方法装饰方法动词:

[HttpGet]
public object Get()
{
    object obj = "hello world";        
    return obj;
}

编辑,与第一个问题完全没有关联:
引自asp.net文档:

  • 您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut。
  • 否则,如果控制器方法的名称以“Get”,“Post”,“Put”,“Delete”,“Head”,“Options”或“Patch”开头,那么按照惯例,操作支持HTTP方法。
  • 如果以上都不是,则该方法支持POST。

但是,我仍然认为总是用动词装饰动作是一个好习惯。这种做法应该避免无用的讨论; - )

答案 1 :(得分:1)

api的路径路径是否正确?

在配置中你必须写下这样的东西:

public static void Register( HttpConfiguration config )
{
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { action = RouteParameter.Optional, id =   RouteParameter.Optional }
            );
}