小喵最近開始學 Web API ,看到的範例多是使用北風資料庫,用的Key都是一個Id。不過在現實的系統中,小喵心想多組Key的狀況是一定會遇到的,那麼如何透過 Web API 傳遞多個參數,來應用在多個複合Key的資料表上面呢?於是小喵又開始找方法啦~
緣起
小喵最近開始學 Web API ,看到的範例多是使用北風資料庫,用的Key都是一個Id。不過在現實的系統中,小喵心想多組Key的狀況是一定會遇到的,那麼如何透過 Web API 傳遞多個參數,來應用在多個複合Key的資料表上面呢?
於是小喵又開始找方法啦~
修改為多組參數的Controller
首先先透過精靈,產生一個【具有空白讀取/寫入動作的API控制器】,並且將本來傳遞的參數【ByVal Id As Integer】,改為傳遞兩個參數字串【ByVal Id1 As String, ByVal Id2 As String】
Imports System.Net
Imports System.Web.Http
Public Class MultiPmptsController
Inherits ApiController
' GET api/multipmpts
Public Function GetValues() As IEnumerable(Of String)
Return New String() {"value1", "value2"}
End Function
' GET api/multipmpts/Id1/Id2
'修改為傳遞兩個參數,分別為Id1 , Id2
Public Function GetValue(ByVal Id1 As String, ByVal Id2 As String) As String
Return "value1 : " & Id1 & " , value2 : " & Id2
End Function
' POST api/multipmpts
Public Sub PostValue(<FromBody()> ByVal value As String)
End Sub
' PUT api/multipmpts/Id1/Id2
'修改為傳遞兩個參數,分別為Id1 , Id2
Public Sub PutValue(ByVal Id1 As String, ByVal Id2 As String, <FromBody()> ByVal value As String)
End Sub
' DELETE api/multipmpts/Id1/Id2
'修改為傳遞兩個參數,分別為Id1 , Id2
Public Sub DeleteValue(ByVal Id1 As String, ByVal Id2 As String)
End Sub
End Class
這樣改完,當然還無法正確地執行,因為這樣的設定與預設的是不一樣的。
所以接著我們還要去更改設定,要求如過Controller是這個名稱,就要去認兩個參數,這部分要修改【App_Start】中的【WebApiConfig.vb】
修改設定檔【WebApiConfig.vb】
開啟 WebApiConfig.vb ,並且複製一份本來的設定,貼上後,進行我們的修改如下
'給予一個名稱
'並且修改defaults裡面的.Controller指定為我們新的Controller名稱,並且指定兩個參數
config.Routes.MapHttpRoute( _
name:="multipmpts", _
routeTemplate:="api/{controller}/{id1}/{id2}", _
defaults:=New With {.Controller = "multipmpts", .id1 = RouteParameter.Optional, .id2 = RouteParameter.Optional} _
)
透過這樣設定後,當我們使用multipmpts這個Controller的時候,就會知道可以傳入兩個參數
實際測試看看
測試結果如預期的,可以得到正確的結果
小喵筆記一下,順便提供大家參考~
以下是簽名:
- 歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
- 小喵大部分的文章會以小喵熟悉的語言VB.NET撰寫,如果您需要C#的Code,也許您可以試著用線上的工具進行轉換,這裡提供幾個參考
Microsoft MVP Visual Studio and Development Technologies (2005~2019/6) | topcat Blog:http://www.dotblogs.com.tw/topcat |