我在.net 4.0 Web表单Web应用程序上使用web api执行以下控制器操作。
public dynamic Post(Guid id, string adminNotes = "", string artNotes = "")
{
dynamic response = new ExpandoObject();
response.Success = false;
Udac udac = CustomerUdacs.Where(x => x.EditKey == id).FirstOrDefault();
if (udac != null)
{
udac.AdminNotes = adminNotes.Trim();
udac.ArtNotes = artNotes.Trim();
response.Success = true;
}
return response;
}
我正在使用jQuery ajax()来发布数据。我使用Guid作为我的id(在我的javascript中存储在ajax_edit_key中)。当我使用它时:
$.ajax({
type: "POST",
url: "/api/notes/"+ajax_edit_key,
data: { adminNotes: $("#tbEditNotesAdmin").val(), artNotes: $("#tbEditNotesArt").val() }
}).done(function (data) {
if (data.Success) {
$("#tbEditNotesAdmin").val(''); //td.id-notes-admin
$("#tbEditNotesArt").val(''); //td.id-notes-art
ajax_edit_key = '';
$dialog.dialog("close");
}
}).fail(function () {
alert('fail');
});
它调用了操作,但我的adminNotes和artNotes从浏览器传递为空字符串。
如果我更改网址以在查询字符串中包含参数,它可以正常工作。
url: "/api/notes/"+ajax_edit_key+"?"+ "adminNotes="+$('#tbEditNotesAdmin').val()+"&artNotes="+$('#tbEditNotesArt').val()
//data: { adminNotes: $("#tbEditNotesAdmin").val(), artNotes: $("#tbEditNotesArt").val() }
这是为什么?如何让它使用数据参数
答案 0 :(得分:2)
这里的问题是WebAPI引擎如何解析多个参数。它只能解析一个参数,默认情况下来自body请求,你有两个。
解决方案是:
对于第二个选项,您只需创建模型:
public class NotesModel
{
public string AdminNotes { get; set; }
public string ArtNotes { get; set; }
}
并将您的操作签名更改为:
public dynamic Post(Guid id, NotesModel model)
而且你不需要改变你的JS。