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

Jam*_*mes 5 c# asp.net asp.net-web-api angularjs

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

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

我在"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);
                    })....
Run Code Online (Sandbox Code Playgroud)

我最终收到这条消息:

没有找到与请求URI'http:// localhost:63289/api/PutItem / ' 匹配的HTTP资源.",MessageDetail:"在控制器上没有找到与请求匹配的"项目"."}

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

jItem = {id:item.ItemId, item:item}
Run Code Online (Sandbox Code Playgroud)

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

    $http.put(sitesettings.url() + "api/PutItem/", jItem, config)
Run Code Online (Sandbox Code Playgroud)

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

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

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

非常感谢

Moh*_*and 8

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

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

从角度发送如下:

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