C#/.NET 分布式专题(SOA【面向服务】WebApi前后端传递参数详解)

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前端 和前面用法一样就不多解释了哈。。。

麻烦点个关注或给个赞

发布了143 篇原创文章 · 获赞 117 · 访问量 4242

猜你喜欢

转载自blog.csdn.net/weixin_41181778/article/details/103851569