近期一个项目需要使用到web api
在使用过程中,对应get请求方式的使用基本没出什么问题
但是对于post请求状况百出。
今将遇到的的问题列出。以作借鉴。
问题 -----post方式服务器端接收值为null
1. 多个参数需要post过去
ajax代码
如下
js代码
function login() { $.ajax({ url: "/api/Login", type: "post", dataType: "json", data: { "name": document.getElementById("name").value, "Password": document.getElementById("pwd").value }, success: function (data) { isLogin(data) //createDb(); } }).fail( function (xhr, textStatus, err) { alert('Error: ' + err); }); }
c#代码
public UsersModel POST(string name, string Password) { //var a = ModelLogin.user(name.name, name.Password); }
报错接收不到值
原因 。 post方式只能接受一个参数而且必须放在
FromBody 里用FromBody特性标识
正确代码如下
public UsersModel POST([FromBody]UsersModel name) { var a = ModelLogin.user(name.name, name.Password); return a; }
需要将
UsersModel定义为类
2.需要post list 对象
这个直接写js正确代码
$.ajax({ url: "/api/Exams", type: "post", dataType: "json", contentType: 'application/json; charset=utf-8', data: JSON.stringify(json), success: function (data) { alert(data); } }).fail( function (xhr, textStatus, err) { alert('Error: ' + err); });
注意事项。
data数据建议直接写js对象,对应c#建立的对象。
喜欢拼接方式的key需要留空
参考资料
http://stackoverflow.com/questions/14779679/jquery-posts-null-instead-of-json-to-asp-net-web-api
http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1#sending_simple_types