ASP.NET WebAPI和Angular POST

时间:2016-11-11 11:54:46

标签: c# asp.net angularjs asp.net-web-api

我有一个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并将参数附加到查询字符串时,它可以正常工作。

2 个答案:

答案 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