使用angularjs将多个对象发送到web api

时间:2015-02-14 10:13:38

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

我的ASP.NET WebApi应用程序中有以下控制器:

[Route("api/PutItem/")]
    [HttpPut]
    public IHttpActionResult PutItem(Guid id, Item item)
    {
        if (!ModelState.IsValid)
    }

我在" Items"中有以下内容: AngularJs服务

var doEditItem = function(item){
            var deferred = $q.defer();

            console.log('item', item);
            var config = {
                headers: { 'Authorization': "Bearer " + $rootScope.token }
                //,params: {id:item.ItemId}
            }
            $http.put(sitesettings.url() + "api/PutItem/", item, config)
                    .success(function(data){

                        deferred.resolve(data);
                    })....

我最终收到此消息:

  

找不到与请求URI匹配的HTTP资源   ' http://localhost:63289/api/PutItem/'。",MessageDetail:"没有采取任何行动   在控制器'项目'与请求匹配。"}

我更改了参数以添加如下项目:

jItem = {id:item.ItemId, item:item}

然后我尝试将jItem传递给put方法,如下所示:

    $http.put(sitesettings.url() + "api/PutItem/", jItem, config)

我的应用程序选择Guid,但不是新项目。如果我删除Guid并发送该项目,我的应用程序会选择新项目。

我想知道如何更改我的应用程序,以便我可以发送一个Guid,应用程序也会选择新的项目。

我使用过Angular.toJson(item,false);但这似乎并没有改变我的ASP.NET应用程序接收信息的方式。

非常感谢

4 个答案:

答案 0 :(得分:8)

您不能将复杂类型与原始类型一起发送到WebAPI操作,您可以发送多个基本类型(Guid,int,字符串等)或单个复杂类型(Item) 。如果你想发送两者,解决方法是使用JObject

[HttpPut]
public void PutItem(JObject data)
{
    Item item =  data["item"].ToObject<Item>();
    Guid id = data["id"].ToObject<Guid>();
}

从angular发送如下:

 $http({
        url: "/api/PutItem",
        method: "PUT",
        data: {id: SOMEGUID, item: { ......} }
 });

答案 1 :(得分:0)

你的代码中的

[Route("api/PutItem/")]
    [HttpPost]
public IHttpActionResult PutItem(Guid id, Item item)

所以你发送Put或Post? 我认为这是一个问题

答案 2 :(得分:0)

从工作项目中拉出来

AngularJS:

var apiUrl = ngRoot + '/api/ControllerName'; //ControllerName should match APIControllerName
$http.put( apiUrl + '/RoutValue/' + id, model );

WebAPIController:

[HttpPut]
[Route("api/APIControllerName/RoutValue/{id}")]
public HttpResponseMessage Put(int id, Model model)

或模型列表

public HttpResponseMessage Put(int id, List<Model> model)

答案 3 :(得分:-1)

@Pakk,你的方法工作导致第一个参数&#34; id&#34;正在作为查询字符串的一部分发送,而只有第二个作为请求正文的一部分发送。这是唯一的方式,从身体发送多个不会工作。