【问题标题】:WCF: Multiple optional parameters in UriTemplateWCF:UriTemplate 中的多个可选参数
【发布时间】:2020-07-13 13:29:33
【问题描述】:

我的服务的 UriTemplate 如下所示:

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

函数如下所示:

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

我的下一个任务是将意图和电子邮件参数设为可选。

所以我的调用必须适用于所有这些变体:

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

如何编辑我的模板和函数以使其正常工作?

【问题讨论】:

    标签: c# web-services wcf uritemplate webget


    【解决方案1】:

    可以将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/

    在这种情况下,如果要设置电子邮件,则必须设置意图。

    所以我认为最好的方法是分别为它们编写一个接口,如下所示:

            [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会请求不同的接口;

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2023-03-09
      • 2021-06-14
      • 2017-09-02
      • 2023-03-08
      • 2014-11-10
      • 1970-01-01
      • 2020-04-20
      • 2020-07-09
      相关资源
      最近更新 更多