C# 使用angularjs将多个对象发送到webapi

C# 使用angularjs将多个对象发送到webapi,c#,asp.net,angularjs,asp.net-web-api,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 def

我的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资源 '',MessageDetail:“未执行任何操作 在与请求匹配的控制器“项”上找到。“}

我对参数进行了更改,以添加如下项目:

jItem = {id:item.ItemId, item:item}
    $http.put(sitesettings.url() + "api/PutItem/", jItem, config)
然后我尝试将jItem传递到put方法,如下所示:

jItem = {id:item.ItemId, item:item}
    $http.put(sitesettings.url() + "api/PutItem/", jItem, config)
我的应用程序拾取Guid,但不拾取新项。如果我删除Guid并发送该项,我的应用程序将拾取新项

我想知道我需要如何更改我的应用程序,以便我可以发送Guid,应用程序也可以拾取新项目

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

非常感谢您的代码:

[Route("api/PutItem/")]
    [HttpPost]
public IHttpActionResult PutItem(Guid id, Item item)
那么你是邮寄还是邮寄?
我认为这是一个问题

您不能将复杂类型与这样的基元类型一起发送到WebAPI操作,您可以发送多个基元类型(Guid、int、字符串等)或单个复杂类型(
)。如果您想同时发送这两种类型,解决方法是使用
JObject

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

从工作项目中提取

AngularJS:

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

[HttpPut]
[Route("api/APIControllerName/RoutValue/{id}")]
public HttpResponseMessage Put(int id, Model model)
或查看模型列表

public HttpResponseMessage Put(int id, List<Model> model)
公共httpresponsemessageput(int-id,列表模型)

@Pakk,您的方法会导致第一个参数“id”正在作为querystring的一部分发送,并且只有第二个作为请求正文的一部分发送。这是唯一有效的方法,从身体发送多个信号是行不通的

嗨,Garret,我错了,因为我一直在玩代码,我忘了更改其中一个方法。但即使它们都匹配post或put,也不起作用。我现在就纠正这个问题。感谢尝试这样做时,我在C#中收到错误,表示字符串无法转换为对象。我能够让它使用以下代码:Item Item=JsonConvert.DeserializeObject(data[“Item”].ToString());