我有一个WebAPI控制器
public class MyController : ApiController
{
[HttpPost]
public SomeResult MyAction(string name, string message)
{
return SomeResult.???;
}
}
我有一个角度控制器调用此方法
$http
.post("/api/My/MyAction", { name: "bob", message: "hello" })
.then(function(xhr) { ... }, function(xhr) { ... });
我得到了这个结果
' /'中的服务器错误应用
无法找到资源。
我做错了什么?
P.S。它不是URL ...当我使用HttpGet
并将参数附加到查询字符串时,它可以正常工作。
答案 0 :(得分:2)
我遇到过这个问题,如果你谷歌有不同的解决方法。最简单的一个要求是在WebApi控制器中只使用一个输入对象,所以在你的情况下只需要创建一个类
public class InputData {
public string name { get; set; }
public string message { get; set; }
}
然后使用[FromBody]
前缀将输入更改为新的创建对象(可能不是必需的,请参阅@ADyson评论)
public SomeResult MyAction([FromBody]InputData inputData)
答案 1 :(得分:2)
对于发布请求的多个属性,您可以在控制器中使用[FromBody]并创建一个ViewModel类。例如:
[HttpPost]
public HttpResponseMessage UpdateNumber([FromBody]UpdateNumberViewModel model)
{
//To do business
return Request.CreateResponse(HttpStatusCode.OK);
}
UpdateViewModel:
public class UpdateViewModel
{
public int Id{ get; set; }
public string Title{ get; set; }
}
角:
var model = {
Id: 1,
Title: 'Vai filhão'
}
$http.post('/api/controller/updateNumber/',model).then(function () { alert("OK"); }, function () {alert("something wrong"); });
您可以在此处查看有关网络API如何运作的更多详细信息:https://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api