Get请求返回参数类型
1.基础类型
前端请求:
//查询用户(登录验证)
$.ajax({
type: "get",
url: "http://localhost:1632/OrderSystem/User/Login",
data: { userId: “1”, password: "1"},
success: function (data, status) {
alert(data);
}
});
后端返回:
// 查询用户是否存在
[HttpGet]
[Route("User/Login")]
public string Login(string userId, string password)
{
var list = new List<User>();
list = userdal.selectByUserId(userId);
if (list.Count > 0)
{
return "0000";// 查询成功
}
else
{
return "1111";// 查询失败
}
2. list 参数
前端请求:
//查询用户信息
$.ajax({
type: "get",
url: "http://localhost:1632/OrderSystem/User/selectByUserId",
contentType: "application/json",
data: { userId: "1" },
success: function (data, status) {
alert(data[0].userId,data[0].pasword);//如果很多条数据,用循环for-in
后端返回:
[HttpGet]
[Route("User/selectByUserId/{userId}")]
public IHttpActionResult selectByUserId(string userId)
{
var list = new List<User>();
list = userdal.selectByUserId(userId);
return Json<List<User>>(list);
}
3.实体 参数
前端请求:
//实体做参数传递(从前往后传)
$.ajax({
var :user={ userId: "2", password: "2" },
type: "get",
url: "http://localhost:1632/OrderSystem/User/Selectid/",
contentType: "application/json",
data: user,
success: function (data, status) {
alert(data);
}
});
后端返回:
[HttpGet]
[Route("User/Selectid")]
public string Selectid([FromUri] User user)
{
var list = new List<User>();
list = userdal.selectByUserId(user.userId);
if (list.Count > 0)
{
return "0000";
}
else
{
return "1111";
}
}
Post请求返回参数类型
1. 单个数据
前端请求:
$.ajax({
type: "Post",
url: "http://localhost:1632/OrderSystem/User/Selectid/",
data: { "": "Jim" },
success: function (data, status) {
alert(data);
}
});
后端返回:
[HttpPost]
public string SaveData([FromBody]string userId)
{
return userId;
}
2. 多个数据
2.1新建一个类去包含传递的参数,虽然可以,但是不够灵活(参考用实体接收)
2.2使用dynamic
前端请求:
$.ajax({
type: "Post",
url: "http://localhost:1632/OrderSystem/User/Selectid/",
contentType: "application/json",
data: JSON.stringify({ userId: "2",password:"2" }),
success: function (data, status) {
alert(data);
}
});
后端返回:
[HttpPost]
[Route("User/Select")]
public object Select(dynamic obj)
{
Return obj.userId;
}
3、实体作为参数
3.1后台使用实体接收
前端请求:
前端传递的实体参数必须和后台接收的实体包含的参数一致 参数形式是 _userId
$.ajax({
type: "Post",
url: "http://localhost:1632/OrderSystem/User/Select/",
contentType: "application/json",
data: JSON.stringify({ _userId: "2", _password: "2" }),
success: function (data, status) {
alert(data);
}
});
后端返回:
[HttpPost]
[Route("User/Select")]
public string Select(User user)
{
var list = new List<User>();
list = userdal.selectByUserId(user.userId);
if (list.Count > 0)
{
return "0000";//成功
}
else
{
return "1111";//失败
}
}
3.2后台使用dynamic接收
前端传递的参数随意,后台参数需要转换格式。注意:public object Select(dynamic obj)
前端请求:
$.ajax({
type: "Post",
url: "http://localhost:1632/OrderSystem/User/Select/",
contentType: "application/json",
data: JSON.stringify({ userId: "2", password: "2" }),
success: function (data, status) {
alert(data);
}
});
后端返回:
[HttpPost]
[Route("User/Select")]
public object Select(dynamic obj)
{
var strName = Convert.ToString(obj.userId);
var strpwd = Convert.ToString(obj.password);
var list = new List<User>();
list = userdal.selectByUserId(strName);
if (list.Count > 0)
{
return "0000";
}
else
{
return "1111";
}
}
3.3.实体和基础类型一起作为参数传递
前端请求:
$.ajax({
var: user = { userId: "3", password: "4" },//实体user
type: "Post",
url: "http://localhost:1632/OrderSystem/User/Select/",
contentType: "application/json",
data: JSON.stringify({ userId: "2", aaa: user }),
success: function (data, status) {
alert(data);
}
});
后端返回:
[HttpPost]
[Route("User/Select")]
public object Select(dynamic obj)
{
return obj.userId; //返回“2”
return obj.aaa; //是以object返回的
}
4、数组作为参数
(1)基础类型数组
前端请求:
var arr = ["1", "2", "3", "4"];
$.ajax({
type: "post",
url: "http://localhost:27221/api/Charging/SaveData",
contentType: 'application/json',
data: JSON.stringify(arr),
success: function (data, status) { }
});
后端代码:
[HttpPost]
public bool SaveData(string[] ids)
{
return true;
}
(2)实体集合
前端请求:
var arr = [
{ ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" },
{ ID: "2", NAME: "Lilei", CREATETIME: "1990-12-11" },
{ ID: "3", NAME: "Lucy", CREATETIME: "1986-01-10" }
];
$.ajax({
type: "post",
url: "http://localhost:27221/api/Charging/SaveData",
contentType: 'application/json',
data: JSON.stringify(arr),
success: function (data, status) {}
});
后端代码:
[HttpPost]
public bool SaveData(List<TB_CHARGING> lstCharging)
{
return true;
}
WebApi返回Json格式字符串
5.1、(改配置法)
WebAPI 默认返回参数是XML 或者Jason格式的。我们可以在 App_Start目录下的WebApiConfig.cs文件中添加下面的4行代码,只返回Jason格式。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
config.Formatters.Remove(config.Formatters.XmlFormatter);//去掉默认的XML格式
var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;//输出结果缩进显示
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//将字段名称改成camelCase格式
}
}
这样返回的结果就都是json类型了,但有个不好的地方,如果返回的结果是String类型,如123,返回的json就会变成"123";
解决的方法是自定义返回类型(返回类型为HttpResponseMessage)
public HttpResponseMessage PostUserName(User user)
{
String userName = user.userName;
var result = new HttpResponseMessage{ Content = new StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json")};
return result;
}
5.2、(万金油法)
方法一中又要改配置,又要处理返回值为String类型的json,甚是麻烦,不如就不用webapi中的的自动序列化对象,自己序列化后再返回
public HttpResponseMessage PostUser(User user)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string str = serializer.Serialize(user);
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}
为了不在每个接口中都反复写那几句代码,所以就封装为一个方法这样使用就方便多了。
public static HttpResponseMessage toJson(Object obj)
{
String str;
if (obj is String ||obj is Char)
{
str = obj.ToString();
}
else
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
str = serializer.Serialize(obj);
}
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}
Ajax:简单使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="jquery-1.7.2.min.js"></script> //引入jQuery文件包
</head>
<body>
用户ID: <input type="text" id="userId" name="用户ID"/>
密码:<input type="text" id="password" name="密码" />
<input type="button" id="btn" name="submit" value="提交" onclick="click"/>
<script type="text/javascript">
$("#btn").click(function () {
var userId = $("#userId").val();
var pwd = $("#password").val();
$.ajax({
type: "get",
url: "http://localhost:1632/OrderSystem/User/selectByUserId",
contentType: "application/json",
async: true,//异步请求,默认为true。如果需要发送同步请求发送false
data: { userId: userId, password: pwd },
success: function (data, status) {
alert(data);
}
});
});
</script>
</body>
</html>