我的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应用程序接收信息的方式。
非常感谢
答案 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;正在作为查询字符串的一部分发送,而只有第二个作为请求正文的一部分发送。这是唯一的方式,从身体发送多个不会工作。