HTML表单或者使用GET或POST发送数据到服务器。表单method属性给出了HTTP方法定义:
<form action="api/values"method="post">
默认的方法是GET。如果表单使用GET,表单数据被编码在URI作为查询字符串。如果表单使用POST,表单数据放置在请求主体。
1. 复杂类型
通常情况下,如果使用POST发送数据到 ApiController时,在ApiController中接受参数为对象,比如
public
HttpResponseMessage PostSysLog(SysLog syslog)
那么在客户端有一个表单form,客户端发生数据用ajax方式就是:
$("#form1").submit(function () { var jqxhr = $.post(‘api/SysLog‘, $(‘#form1‘).serialize()) .success(function () { var loc = jqxhr.getResponseHeader(‘Location‘); var a = $(‘<a/>‘, { href: loc, text: loc }); $(‘#message‘).html(a); }) .error(function () { $(‘#message‘).html("Error posting the update."); }); return false; });
2. 简单类型
如果仅仅想发送一个简单类型的数据(在服务端没有对象),比如大字符串,怎么做呢?
public string Post([FromBody]string value)
{
return value;
}
在客户端调用方法:
$.post("api/values/", {"" : "20"}, function (data)
{
alert(data);
});
也可以发送一个数组
public string Post([FromBody]string[] value) { return value[0]; }
在客户端调用方法:
$.post("api/values/", {"" : ["10","20","30"]}, function (data)
{
alert(data);
});
在有些情况下很有用,比如批量上传数据的时候,可以一次发送,在服务端解析数据。
也可以使用一下方法:
服务端
// POST api/values public void Post(List<string> val)//(Person obj ) { try { Person obj = new Person(); obj.Name = val[0]; obj.Address = val[1]; obj.DOB = Convert.ToDateTime(val[2]); db.Persons.Add(obj); db.SaveChanges(); } catch (Exception) { } }
客户端:
$(document).ready(function () { $("#submit").click(function () { var name = $("#Name").val(); var address = $("#Address").val(); var dob = $("#DOB").val(); $.ajax({ url: "http://localhost:49493/api/Values", type: "Post", data: JSON.stringify([name, address, dob]), //{ Name: name, // Address: address, DOB: dob }, contentType: ‘application/json; charset=utf-8‘, success: function (data) { }, error: function () { alert(‘error‘); } }); }); });