我目前正在尝试开发一个简单的角度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/,看起来是正确的。
答案 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([...]);