簡體   English   中英

WCF:UriTemplate 中的多個可選參數

[英]WCF: Multiple optional parameters in UriTemplate

我的服務的 UriTemplate 如下所示:

[WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend}/email/{email}")]

function 看起來像這樣:

public User LoginUser(string authorizationCode, string userId, string intend, string email)

我平時的電話是這樣的:

http://localhost:60522/MyService.svc/json/LoginUser/authorizationCode/111222333/userId/0006435cec5aa5640639b5d08314bb989a43519/intend/yyy/email/abc@web.de

我的下一個任務是使 intent 和 email 參數可選。

所以我的電話必須在所有這些變體中工作:

http://localhost:60522/MyService.svc/json/LoginUser/authorizationCode/111222333/userId/0006435cec5aa5640639b5d08314bb989a43519/intend/yyy/email/abc@web.de

http://localhost:60522/MyService.svc/json/LoginUser/authorizationCode/111222333/userId/0006435cec5aa5640639b5d08314bb989a43519/intend/yyy

http://localhost:60522/MyService.svc/json/LoginUser/authorizationCode/111222333/userId/0006435cec5aa5640639b5d08314bb989a43519/email/abc@web.de

http://localhost:60522/MyService.svc/json/LoginUser/authorizationCode/111222333/userId/0006435cec5aa5640639b5d08314bb989a43519

如何編輯我的模板和 function 以使其工作?

您可以將intent和email的默認值設置為null,如下圖:

        [OperationContract]
        [WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend=null}/{email=null}")]
         string LoginUser(string authorizationCode, string userId, string intend, string email);

我們可以通過下面的 URI 訪問該服務:

http://localhost:8000/LoginUser/authorizationCode/Test/userId/Test/intend/

http://localhost:8000/LoginUser/authorizationCode/Test/userId/Test/intend/int/

http://localhost:8000/LoginUser/authorizationCode/Test/userId/Test/intend/int/ema/

在這種情況下,如果要設置 email,則必須設置意圖。

所以我認為最好的方法是分別為它們編寫一個接口,如下所示:

        [OperationContract]
        [WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend}/email/{email}")]
         string LoginUser1(string authorizationCode, string userId, string intend, string email);
        [OperationContract]
        [WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend}/")]
        string LoginUser2(string authorizationCode, string userId, string intend);
        [OperationContract]
        [WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/email/{email}")]
        string LoginUser3(string authorizationCode, string userId, string email);
        [OperationContract]
        [WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/")]
        string LoginUser4(string authorizationCode, string userId);

不同的URIS會請求不同的接口;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM