Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF:UriTemplate中的多个可选参数_C#_Web Services_Wcf_Uritemplate_Webget - Fatal编程技术网

C# WCF:UriTemplate中的多个可选参数

C# WCF:UriTemplate中的多个可选参数,c#,web-services,wcf,uritemplate,webget,C#,Web Services,Wcf,Uritemplate,Webget,“我的服务”的模板如下所示: [WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend}/email/{email}")] public User LoginUser(string authorizationCode, string userId, string intend, string email) 函数如下所示: [We

“我的服务”的模板如下所示:

[WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend}/email/{email}")]
public User LoginUser(string authorizationCode, string userId, string intend, string email)
函数如下所示:

[WebGet(UriTemplate = "LoginUser/authorizationCode/{authorizationCode}/userId/{userId}/intend/{intend}/email/{email}")]
public User LoginUser(string authorizationCode, string userId, string intend, string email)
我通常的电话是这样的:

[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

我的下一个任务是使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


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

您可以将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);
不同的URI将请求不同的接口