AngularJs:$ http.post总是返回404错误

时间:2016-09-09 22:13:16

标签: javascript angularjs asp.net-web-api asp.net-web-api2

我目前正在尝试开发一个简单的角度js应用程序。 我正在尝试将数据从客户端发布到web api。 但是,当我从角度应用程序发出发布请求时,我收到404错误。

以下是我的帖子请求,

 $http.post('/api/LoadApi/', jsonData).then(function (result) {
                console.log(result.data);
            })
           .catch(function (error) {
           });

其中jsonData是有效的json数据。

我的网络API代码就是这个,

public class LoadApiController : ApiController
{
    [HttpPost]
    public HttpResponseMessage LoadData(object dataToLoad)
    {
        var response = Request.CreateResponse(HttpStatusCode.Created);

        return response;
    }
}

我的网络API路由配置就是这个,

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{dataToLoad}"
            );

但是,当我运行代码时,它会抛出错误

'/'应用程序中的

服务器错误。 无法找到该资源。 说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。 请求的网址:/ api / LoadApi /

有人能说出上述代码的问题是什么吗?

它说网址存在问题。生成的网址为http://localhost:14154/api/LoadApi/,看起来是正确的。

1 个答案:

答案 0 :(得分:1)

问题在于您的路由定义以及您尝试将数据发送到控制器方法的方式。我建议使用基于属性的路由。在Web API控制器中执行以下操作:

[RoutePrefix("api/LoadApi")]
public class LoadApiController : ApiController
{
    [HttpPost]
    [Route("loadData")]
    public HttpResponseMessage LoadData(object dataToLoad)
    {
        var response = Request.CreateResponse(HttpStatusCode.Created);
        return response;
    }
}

Application_Start()中的Global.asax.cs方法更改为:

protected void Application_Start()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

确保WebApiConfig.cs中的App_Start具有Register()方法,如下所示:

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();
}

最后将$http.post来电更改为:

$http.post('/api/LoadApi/loadData', jsonData).then([...]);