Lex*_*ner 13 c# asp.net-mvc jquery asp.net-web-api
很抱歉在提出另一个问题之后很快就问这个问题,但我现在正在努力解决这个问题.
我有一个jQuery方法,它收集数据并将其传递给valuescontroller中的PUT函数.但控制器甚至没有被调用(因为我有一个断点,它没有打破)
我可以检查一下我的jQuery是否正确?
var data = {
id: truckId,
obj: {
TruckId: truckId,
Reg: reg,
Description: desc,
Condition: condition
}
};
var json = JSON.stringify(data)
$.ajax({
url: '/api/Values',
type: 'PUT',
contentType: "application/json; charset=utf-8",
data: json,
success: function (results) {
$.getJSON("api/Values", LoadTrucks);
alert('Truck Updated !');
}
})
Run Code Online (Sandbox Code Playgroud)
控制器看起来像这样:
public void Put(int id, TruckInfo obj)
{
WebApiTestEntities db = new WebApiTestEntities();
var data = from item in db.TruckInfoes
where item.TruckId == id
select item;
TruckInfo oldRecord = data.SingleOrDefault();
oldRecord.Reg = obj.Reg;
oldRecord.Description = obj.Description;
oldRecord.Condition = obj.Condition;
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
现在它看起来像我至少应该到达控制器.我的猜测是参数没有正确传递,因此它正在寻找一种不同的方法,但我不明白为什么或如何纠正它.
任何帮助将不胜感激 :)
莱克斯
编辑:根据要求,进一步的信息.
错误控制台上没有Javascript错误.
控制台日志显示以下内容:
{"Message":"找不到与请求URI匹配的HTTP资源'localhost:62997/api/Values'.","MessageDetail":"在控制器上找不到与请求匹配的值'.}}
在JSON控制台的MessageDetail下,我得到了这个(我认为这支持了我对不正确参数的理论)
"没有找到与请求相匹配的控制器'值'的操作"
然而,获得成功.(而且我今早早些时候上班了.)
cuo*_*gle 18
如下更改您的代码,然后它将正常工作:
var data = {
TruckId: truckId,
Reg: reg,
Description: desc,
Condition: condition
};
var json = JSON.stringify(data)
$.ajax({
url: '/api/Values/' + truckId,
type: 'PUT',
contentType: "application/json; charset=utf-8",
data: json,
success: function (results) {
}
})
Run Code Online (Sandbox Code Playgroud)
使用REST时的最佳做法是:
您正在执行PUT请求而不指定对象的ID.
看到这里.
PUT请求中的URI标识请求附带的实体
更改
url: '/api/Values',
type: 'PUT',
Run Code Online (Sandbox Code Playgroud)
至
url: '/api/Values/' + truckId,
type: 'PUT',
Run Code Online (Sandbox Code Playgroud)
路由引擎需要id
与您的方法匹配
public void Put(int id, TruckInfo obj)
Run Code Online (Sandbox Code Playgroud)
目前,您正试图将此项放入您的模型中:
id: truckId,
obj: {
TruckId: truckId,
//etc
Run Code Online (Sandbox Code Playgroud)
但这不起作用.只有一个对象可以从请求的主体中解除序列化.
只需将您的消息有效负载更改为此
var data = {
TruckId: truckId,
Reg: reg,
Description: desc,
Condition: condition
}
Run Code Online (Sandbox Code Playgroud)
并使用正确的url结构,例如:
PUT http://localhost:62997/api/Values/1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14035 次 |
最近记录: |