咱們總結一下用js請求服務器的傳參方法。html
Get方式
Get主要是用來查詢,通常分爲無參,一個參數,多個參數,實體對象參數。前端
一、無參
-
-
var get_f1 = function() {
-
-
-
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
二、一個參數
-
-
var get_f2 = function() {
-
-
-
-
data: { strQuery: JSON.stringify({ Id: "1", Name: "Jim", CreateTime: "1988-09-11" }) },
-
contentType: "application/json",
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
後臺控制器方法
-
-
-
-
-
-
-
public string Get(string strQuery)
-
-
-
-
-
return "一個參數" + strQuery;
-
備註:在Get方式的時候咱們也能夠把參數放在url,我這裏爲了前臺寫得統一些,全都放在data裏面,感受好看一點。ajax
三、多個參數
-
-
var get_f3 = function() {
-
-
-
-
data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
後臺控制器方法
-
-
-
-
-
-
-
-
-
public string Get(int Id, string Name, DateTime CreateTime)
-
-
return String.Format("多個參數,{0},{1},{2}", Id, Name, CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
-
四、一個實體對象參數
-
-
var get_f4 = function() {
-
-
-
url: "/api/Demo/GetModel",
-
data: { Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
-
success: function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
備註:到這裏有沒有發現多個參數和一個實體對象的請求方法是同樣的,假如兩個接收的方法都寫在同一個控制器裏面的話,路由是區分不出來要匹配那個方法處理,json
因此要用自定義路由來區分,在WebApi裏面改方法名字是沒有用的。api
後臺控制器方法
-
-
-
-
-
-
-
-
public string Get([FromUri]TbCharging oData)
-
-
return String.Format("一個實體對象參數,{0},{1},{2},{3}", oData.Id, oData.Name, oData.Des, oData.CreateTime.ToString("yyyy-MM-dd hh:mm:ss"));
-
備註:在使用Get傳遞實體對象參數的時候要注意,由於Get方式的時候參數是寫在url的,因此咱們在後臺用[FromBody]是拿不到實體參數的,須要寫[FromUri]才行。數組
Post方式
Post方式咱們通常用來作增、刪、改操做。在WebApi中Post僅僅用來作增長操做,修改用Put,刪除用Delete。這些在新建模板的時候就自動爲咱們生成了。服務器
還有要提一下的是Post只能傳遞一個參數,若是須要多個參數的時候咱們須要把它們合併成一個擴展對象,當作對象來傳遞。app
在後臺接收的時候咱們須要在參數列表裏面寫上[FromBody]由於Post方式的參數就不在Url裏面了。post
一、一個參數
-
-
var post_f1 = function() {
-
-
-
-
-
-
success:
function(data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
注意:在寫參數的時候咱們不能把參數寫成 data:{"name":"Jim"} 這種方式,由於在後臺是拿不到值的。ui
後臺控制器方法
-
-
-
-
-
-
public string Post([FromBody]string name)
-
-
-
二、一個實體對象參數
-
-
var post_f2 = function () {
-
var postdata = { Id: "1", Name: "Jim", CreateTime: "1988-09-11" };
-
-
-
url: "/api/Demo/PostAdd",
-
-
-
success: function (data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
後臺控制器方法
-
-
-
-
-
-
-
-
public object Post([FromBody]TbCharging oData)
-
-
var strName = String.Format("一個對象,{0},{1}", oData.Id, oData.Name);
-
-
備註:這裏參數列表最好寫上[FromBody],雖然不寫也能拿到值。
三、一個數組參數
-
-
var post_f3 = function () {
-
var arr = ["1", "2", "3", "4"];
-
-
-
url: "/api/Demo/PostArray",
-
contentType: 'application/json',
-
data: JSON.stringify(arr),
-
success: function (data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
這裏咱們說一下contentType和dataType。
contentType
發送信息至服務器時內容編碼類型。假如你不寫的話,默認值是: "application/x-www-form-urlencoded"。
dataType
預期服務器返回的數據類型。
若是咱們Post提交的是json參數,最好就寫上 contentType: 'application/json'
後臺的控制器方法
-
-
-
-
-
-
-
-
public object Post(string[] ids)
-
-
return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
-
四、實體集合參數
-
-
var post_f4 = function () {
-
-
{
Id: "1", Name: "Jim", CreateTime: "1988-09-11" },
-
{
Id: "2", Name: "Lilei", CreateTime: "1990-12-11" },
-
{
Id: "3", Name: "Lucy", CreateTime: "1986-01-10" }
-
-
-
-
url: "/api/Demo/PostMulti",
-
contentType:
'application/json',
-
data: JSON.stringify(arr),
-
success: function (data, status) {
-
if (status == "success") {
-
$(
"#div_test").html(data);
-
-
-
-
後臺的控制器方法
-
-
-
-
-
-
-
-
public object Post([FromBody]List<TbCharging> lstCharging)
-
-
return String.Format("{0},{1}", lstCharging[0].Name, lstCharging[1].Name);
-
自定義路由
使用場景:用於方法重載,忽略方法名,自定義url
使用步驟:
一、在控制器類上方加入一個標記
-
[
RoutePrefix("api/Demo")]
-
public class DemoController : ApiController
-
二、在方法中加入路由標記
-
-
-
-
-
-
-
-
public object Post([FromBody]string[] ids)
-
-
return String.Format("{0},{1},{2}", ids[0], ids[1], ids[2]);
-
備註:上面的api/Demo和PostArray能夠本身定義名字。像我這樣寫就能夠直接用 url:"/api/Demo/PostArray"來訪問了。