[Web API][筆記]傳遞多個參數(Multiple Parameters)方式

小喵最近開始學 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】

001


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的時候,就會知道可以傳入兩個參數

 

實際測試看看

測試結果如預期的,可以得到正確的結果

003

 

小喵筆記一下,順便提供大家參考~

 


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6)