Get前端(以JQ测试,其他前端请求列如:axio,jsonp等都是一样的)
$("#btnGet1").on("click", function () {
//$.ajax({ url: "/api/users", type: "get", data: { "userName": "Superman" }, success: function (data) { alert(data); }, datatype: "json" });//指向接口,参数匹配的,大小写不区分
$.ajax({
//url: "/api/users/GetUserByName?ticket=" + ticket
url: "/api/users/GetUserByName", type: "get", data: { "username": "Superman" },
beforeSend: function (XHR) {
//发送ajax请求之前向http的head里面加入验证信息
XHR.setRequestHeader('Authorization', 'BasicAuth ' + ticket);
},
success: function (data) {
alert(data);
}, datatype: "json"
});
});
$("#btnGet2").on("click", function () {//单个参数
$.ajax({ url: "/api/users/GetUserByID", type: "get", data: { "id": $("#txtId").val() }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet3").on("click", function () {//两个参数
$.ajax({ url: "/api/users/GetUserByNameId", type: "get", data: { "userName": "Superman", "id": $("#txtId").val() }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet4").on("click", function () {//无参数
$.ajax({ url: "/api/users/Get", type: "get", data: "", success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet5").on("click", function () {//传递实体 json对象
$.ajax({ url: "/api/users/GetUserByModel", type: "get", data: user, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet6").on("click", function () {//传递实体 必须FromUri才能找到
$.ajax({ url: "/api/users/GetUserByModelUri", type: "get", data: user, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet7").on("click", function () {//传递实体,序列化后传递
$.ajax({ url: "/api/users/GetUserByModelSerialize", type: "get", data: { userString: JSON.stringify(user) }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet8").on("click", function () {//传递实体,序列化后传递
$.ajax({ url: "/api/users/GetUserByModelSerializeWithoutGet", type: "get", data: { userString: JSON.stringify(user) }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnGet9").on("click", function () {//传递实体,序列化后传递 405 Method Not Allowed 不带httpget需要用get开头
$.ajax({ url: "/api/users/NoGetUserByModelSerializeWithoutGet", type: "get", data: { userString: JSON.stringify(user) }, success: function (data) { alert(data); }, datatype: "json" });
});
Get后端响应
#region HttpGet
// GET api/Users
[HttpGet]
public IEnumerable<Users> Get()
{
return _userList;
}
// GET api/Users/5
[HttpGet]
//[AllowAnonymous]
//[EnableCors(origins: "http://localhost:9099/", headers: "*", methods: "GET,POST,PUT,DELETE")]
//[CustomBasicAuthorizeAttribute]//方法注册
//[CustomExceptionFilterAttribute]
[CustomActionFilterAttribute]
public Users GetUserByID(int id)
{
//throw new Exception("1234567");
string idParam = HttpContext.Current.Request.QueryString["id"];
var user = _userList.FirstOrDefault(users => users.UserID == id);
if (user == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return user;
}
//GET api/Users/?username=xx
[HttpGet]
//[CustomBasicAuthorizeAttribute]
//[CustomExceptionFilterAttribute]
public IEnumerable<Users> GetUserByName(string userName)
{
//throw new Exception("1234567");
string userNameParam = HttpContext.Current.Request.QueryString["userName"];
return _userList.Where(p => string.Equals(p.UserName, userName, StringComparison.OrdinalIgnoreCase));
}
//GET api/Users/?username=xx&id=1
[HttpGet]
[CustomActionFilterAttribute]
public IEnumerable<Users> GetUserByNameId(string userName, int id)
{
string idParam = HttpContext.Current.Request.QueryString["id"];
string userNameParam = HttpContext.Current.Request.QueryString["userName"];
return _userList.Where(p => string.Equals(p.UserName, userName, StringComparison.OrdinalIgnoreCase));
}
[HttpGet]
public IEnumerable<Users> GetUserByModel(Users user)
{
string idParam = HttpContext.Current.Request.QueryString["id"];
string userNameParam = HttpContext.Current.Request.QueryString["userName"];
string emai = HttpContext.Current.Request.QueryString["email"];
return _userList;
}
[HttpGet]
public IEnumerable<Users> GetUserByModelUri([FromUri]Users user)
{
string idParam = HttpContext.Current.Request.QueryString["id"];
string userNameParam = HttpContext.Current.Request.QueryString["userName"];
string emai = HttpContext.Current.Request.QueryString["email"];
return _userList;
}
[HttpGet]
public IEnumerable<Users> GetUserByModelSerialize(string userString)
{
Users user = JsonConvert.DeserializeObject<Users>(userString);
return _userList;
}
//[HttpGet]
public IEnumerable<Users> GetUserByModelSerializeWithoutGet(string userString)
{
Users user = JsonConvert.DeserializeObject<Users>(userString);
return _userList;
}
/// <summary>
/// 方法名以Get开头,WebApi会自动默认这个请求就是get请求,而如果你以其他名称开头而又不标注方法的请求方式,那么这个时候服务器虽然找到了这个方法,但是由于请求方式不确定,所以直接返回给你405——方法不被允许的错误。
/// 最后结论:所有的WebApi方法最好是加上请求的方式([HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete]),不要偷懒,这样既能防止类似的错误,也有利于方法的维护,别人一看就知道这个方法是什么请求。
/// </summary>
/// <param name="userString"></param>
/// <returns></returns>
public IEnumerable<Users> NoGetUserByModelSerializeWithoutGet(string userString)
{
Users user = JsonConvert.DeserializeObject<Users>(userString);
return _userList;
}
#endregion HttpGet
Post前端(以JQ测试,其他前端请求列如:axio,jsonp等都是一样的)
$("#btnPost1").on("click", function () {//单个值传递,json数据不要key,这样后台才能获取
$.ajax({ url: "/api/users/RegisterNoKey", type: "post", data: { "": $("#txtId").val() }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPost2").on("click", function () {//key-value形式后台拿不到这个参数,但是可以直接访问
$.ajax({ url: "/api/users/Register", type: "post", data: { "id": $("#txtId").val() }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPost3").on("click", function () {//传递json格式的,后台可以用实体接收
$.ajax({ url: "/api/users/RegisterUser", type: "post", data: user, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPost4").on("click", function () {//传递json序列化后的格式,后台可以用实体接收,需要指定contentType
$.ajax({ url: "/api/users/RegisterUser", type: "post", data: JSON.stringify(user), success: function (data) { alert(data); }, datatype: "json", contentType: 'application/json', });
});
$("#btnPost5").on("click", function () {//JObject接收
$.ajax({ url: "/api/users/RegisterObject", type: "post", data: { "User": user, "Info": info }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPost6").on("click", function () {//Dynamic 失败了 要序列化就可以了
$.ajax({ url: "/api/users/RegisterObjectDynamic", type: "post", data: { "User": user, "Info": info }, success: function (data) { alert(data); }, datatype: "json", contentType: 'application/json' });
});
Post后端响应
#region HttpPost
//POST api/Users/RegisterNone
[HttpPost]
public Users RegisterNone()
{
return _userList.FirstOrDefault();
}
[HttpPost]
public Users RegisterNoKey([FromBody]int id)
{
string idParam = HttpContext.Current.Request.Form["id"];
var user = _userList.FirstOrDefault(users => users.UserID == id);
if (user == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return user;
}
//POST api/Users/register
//只接受一个参数的需要不给key才能拿到
[HttpPost]
public Users Register([FromBody]int id)//可以来自FromBody FromUri
//public Users Register(int id)//可以来自url
{
string idParam = HttpContext.Current.Request.Form["id"];
var user = _userList.FirstOrDefault(users => users.UserID == id);
if (user == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return user;
}
//POST api/Users/RegisterUser
[HttpPost]
public Users RegisterUser(Users user)//可以来自FromBody FromUri
{
string idParam = HttpContext.Current.Request.Form["UserID"];
string nameParam = HttpContext.Current.Request.Form["UserName"];
string emailParam = HttpContext.Current.Request.Form["UserEmail"];
//var userContent = base.ControllerContext.Request.Content.ReadAsFormDataAsync().Result;
var stringContent = base.ControllerContext.Request.Content.ReadAsStringAsync().Result;
return user;
}
//POST api/Users/register
[HttpPost]
public string RegisterObject(JObject jData)//可以来自FromBody FromUri
{
string idParam = HttpContext.Current.Request.Form["User[UserID]"];
string nameParam = HttpContext.Current.Request.Form["User[UserName]"];
string emailParam = HttpContext.Current.Request.Form["User[UserEmail]"];
string infoParam = HttpContext.Current.Request.Form["info"];
dynamic json = jData;
JObject jUser = json.User;
string info = json.Info;
var user = jUser.ToObject<Users>();
return string.Format("{0}_{1}_{2}_{3}", user.UserID, user.UserName, user.UserEmail, info);
}
[HttpPost]
public string RegisterObjectDynamic(dynamic dynamicData)//可以来自FromBody FromUri
{
string idParam = HttpContext.Current.Request.Form["User[UserID]"];
string nameParam = HttpContext.Current.Request.Form["User[UserName]"];
string emailParam = HttpContext.Current.Request.Form["User[UserEmail]"];
string infoParam = HttpContext.Current.Request.Form["info"];
dynamic json = dynamicData;
JObject jUser = json.User;
string info = json.Info;
var user = jUser.ToObject<Users>();
return string.Format("{0}_{1}_{2}_{3}", user.UserID, user.UserName, user.UserEmail, info);
}
#endregion HttpPost
Put前端(以JQ测试,其他前端请求列如:axio,jsonp等都是一样的)
$("#btnPut1").on("click", function () {//单个值传递,json数据不要key,这样后台才能获取
$.ajax({ url: "/api/users/RegisterNoKeyPut", type: "put", data: { "": $("#txtId").val() }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPut2").on("click", function () {//key-value形式后台拿不到
$.ajax({ url: "/api/users/RegisterPut", type: "put", data: { "id": $("#txtId").val() }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPut3").on("click", function () {//传递json格式的,后台可以用实体接收
$.ajax({ url: "/api/users/RegisterUserPut", type: "put", data: user, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPut4").on("click", function () {//传递json序列化后的格式,后台可以用实体接收,需要指定contentType
$.ajax({ url: "/api/users/RegisterUserPut", type: "put", data: JSON.stringify(user), success: function (data) { alert(data); }, datatype: "json", contentType: 'application/json', });
});
$("#btnPut5").on("click", function () {//JObject接收
$.ajax({ url: "/api/users/RegisterObjectPut", type: "put", data: { "User": user, "Info": info }, success: function (data) { alert(data); }, datatype: "json" });
});
$("#btnPut6").on("click", function () {//Dynamic 失败了
$.ajax({ url: "/api/users/RegisterObjectDynamicPut", type: "put", data: { "User": user, "Info": info }, success: function (data) { alert(data); }, datatype: "json", contentType: 'application/json' });
});
Put后端响应
#region HttpPut
//POST api/Users/RegisterNonePut
[HttpPut]
public Users RegisterNonePut()
{
return _userList.FirstOrDefault();
}
[HttpPut]
public Users RegisterNoKeyPut([FromBody]int id)
{
string idParam = HttpContext.Current.Request.Form["id"];
var user = _userList.FirstOrDefault(users => users.UserID == id);
if (user == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return user;
}
//POST api/Users/registerPut
//只接受一个参数的需要不给key才能拿到
[HttpPut]
public Users RegisterPut([FromBody]int id)//可以来自FromBody FromUri
//public Users Register(int id)//可以来自url
{
string idParam = HttpContext.Current.Request.Form["id"];
var user = _userList.FirstOrDefault(users => users.UserID == id);
if (user == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return user;
}
//POST api/Users/RegisterUserPut
[HttpPut]
public Users RegisterUserPut(Users user)//可以来自FromBody FromUri
{
string idParam = HttpContext.Current.Request.Form["UserID"];
string nameParam = HttpContext.Current.Request.Form["UserName"];
string emailParam = HttpContext.Current.Request.Form["UserEmail"];
//var userContent = base.ControllerContext.Request.Content.ReadAsFormDataAsync().Result;
var stringContent = base.ControllerContext.Request.Content.ReadAsStringAsync().Result;
return user;
}
//POST api/Users/registerPut
[HttpPut]
public string RegisterObjectPut(JObject jData)//可以来自FromBody FromUri
{
string idParam = HttpContext.Current.Request.Form["User[UserID]"];
string nameParam = HttpContext.Current.Request.Form["User[UserName]"];
string emailParam = HttpContext.Current.Request.Form["User[UserEmail]"];
string infoParam = HttpContext.Current.Request.Form["info"];
dynamic json = jData;
JObject jUser = json.User;
string info = json.Info;
var user = jUser.ToObject<Users>();
return string.Format("{0}_{1}_{2}_{3}", user.UserID, user.UserName, user.UserEmail, info);
}
[HttpPut]
public string RegisterObjectDynamicPut(dynamic dynamicData)//可以来自FromBody FromUri
{
string idParam = HttpContext.Current.Request.Form["User[UserID]"];
string nameParam = HttpContext.Current.Request.Form["User[UserName]"];
string emailParam = HttpContext.Current.Request.Form["User[UserEmail]"];
string infoParam = HttpContext.Current.Request.Form["info"];
dynamic json = dynamicData;
JObject jUser = json.User;
string info = json.Info;
var user = jUser.ToObject<Users>();
return string.Format("{0}_{1}_{2}_{3}", user.UserID, user.UserName, user.UserEmail, info);
}
#endregion HttpPut
Delete前端 和前面用法一样就不多解释了哈。。。