0

我无法从工厂的 API 控制器获得响应。

我得到错误404 page not found

我得到了正确.js-file的路由,HTML-document并且路由似乎很好。

应用程序.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>

请帮忙!

4

2 回答 2

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。

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

于 2015-02-23T14:17:01.007 回答
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 }
            );
}
于 2015-02-23T14:18:13.263 回答