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应用程序接收信息的方式.
非常感谢
您不能将复杂类型与原始类型一起发送到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)