WebApi引數傳遞總結

2021-06-28 10:31:50 字數 1353 閱讀 1392

在webapi中,請求主體(httpcontent)只能被讀取一次,不被快取,只能向前讀取的流。

舉例子說明:

服務端方法: void action(int id, string name) // 所有引數都是簡單型別,因而都將來自url

服務端方法: void action([fromuri] int id, [fromuri] string name) // 同上

void action([frombody] string name); //[formbody]特性顯示標明讀取整個body為乙個字串作為引數

類定義:

public class customer  

public int age  

}服務端方法: void action(int id, customer c) // 引數id從query string中讀取,引數c是乙個複雜customer物件類戲,通過formatter從body中讀取

服務端方法: void action(customer c1, customer c2) // 出錯!多個引數都是複雜型別,都試圖從body中讀取,而body只能被讀取一次

服務端方法: void action([fromuri] customer c1, customer c2) // 可以!不同於上面的action,複雜型別c1將從url中讀取,c2將從body中讀取

4.modelbinder方式:

void action([modelbinder(mycustombinder)] sometype c) // 標示使用特定的model binder來解析引數

[modelbinder(mycustombinder)] public class sometype // 通過給特定型別sometype宣告標註[modelbidner(mycustombinder)]特性使得所有sometype型別引數應用此規則 

void action(sometype c) // 由於c的型別為sometype,因而應用sometype上的特性決定其採用model binding

總結:1. 預設簡單引數都通過url引數方式傳遞,例外:

1.1 如果路由中包含了id引數,則id引數通過路由方式傳遞;

1.2 如果引數被標記為[frombody],則可以該引數可以為簡單引數,客戶端通過post方式傳遞:$.ajax(url, '=value'),或者$.ajax(});

2. 預設複雜引數(自定義實體類)都通過post方式傳遞,例外:

2.1 如果引數值被標記為[fromuri], 則該引數可以為複雜引數;

3. 被標記為[frombody]的引數只允許出現一次, 被標記為[fromuri]的引數可以出現多次,如果被標記為[fromuri]的引數是簡單引數,該標記可以去掉。

WebApi中的引數傳遞

webapi引數傳遞總結 在webapi中,請求主體 httpcontent 只能被讀取一次,不被快取,只能向前讀取的流。舉例子說明 服務端方法 void action int id,string name 所有引數都是簡單型別,因而都將來自url 服務端方法 void action fromuri...

傳遞多個引數並獲取Web API的資料

近段時間學習web api覺得非常有意思。預設的路由情況之下,獲取資料時,它不必指定action操作名。還有另外感想,就是自從學習asp.net mvc之後,加上jquery,讓insus.net已經慢慢遠離開asp.net,想起了那曾經得心應手的web控制項.前兩篇 asp.net mvc的web...

傳遞多個引數並獲取Web API的資料

近段時間學習web api覺得非常有意思。預設的路由情況之下,獲取資料時,它不必指定action操作名。還有另外感想,就是自從學習asp.net mvc之後,加上jquery,讓insus.net已經慢慢遠離開asp.net,想起了那曾經得心應手的web控制項.前兩篇 asp.net mvc的web...