WCF: несколько дополнительных параметров в UriTemplate - PullRequest
0 голосов
/ 10 июля 2020

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

Моя следующая задача - сделать параметр intend. * И email необязательным. 1013 *

Итак, мой вызов должен работать во всех этих вариантах:

http://localhost: 60522 / MyService.svc / json / LoginUser / authorizationCode / 111222333 / userId / 0006435cec5aa5640639b5d08314bb989a43519y / intend / ymail / abc@web.de

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

http://localhost: 60Service5 / json / LoginUser / authorizationCode / 111222333 / userId / 0006435cec5aa5640639b5d08314bb989a43519 / email / abc@web.de

http://localhost: 60522 / MyService.svc user / json / LoginUser / authorizationCode / 111222339bb / 00040148323a5 a43519

Как мне отредактировать мой шаблон и функцию, чтобы они работали?

1 Ответ

1 голос
/ 13 июля 2020

Вы можете установить значения по умолчанию для intend и 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 будут запрошены разные интерфейсы;

...