WCF и дополнительные параметры - PullRequest
17 голосов
/ 25 апреля 2011

Я только начал использовать WCF с REST и UriTemplates. Возможно ли теперь использовать дополнительные параметры?

Если нет, то что бы вы, ребята, порекомендовали бы мне сделать для системы, в которой всегда используются три параметра, которые используются в URL-адресе, и другие, необязательные (различное количество)?

Пример:

https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free 
  • идентификатор, тип, язык всегда присутствуют
  • режим не является обязательным

Ответы [ 3 ]

31 голосов
/ 25 апреля 2011

Я только что протестировал его с WCF 4, и он работал без проблем. Если я не использую режим в строке запроса, я получу ноль в качестве значения параметра:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet(UriTemplate = "GetData?data={value}&mode={mode}")]
    string GetData(string value, string mode);
}

Реализация метода:

public class Service : IService
{
    public string GetData(string value, string mode)
    {
        return "Hello World " + value + " " + mode ?? "";
    }
}

Мне кажется, что все параметры строки запроса являются необязательными. Если параметр отсутствует в строке запроса, он будет иметь значение по умолчанию для его типа => null для string, 0 для int и т. Д. MS также заявляет , что это должно быть реализовано.

В любом случае вы всегда можете определить UriTemplate с помощью id, type и language и получить доступ к дополнительным параметрам внутри метода с помощью WebOperationContext:

var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];
2 голосов
/ 26 апреля 2011

Я пробовал с дополнительными параметрами в restful веб-сервисе. Если мы ничего не передадим в значение параметра, оно останется нулевым.После этого мы можем проверить на нулевое или пустое значение в функции.Если оно пустое, не используйте его, иначе вы можете использовать его.Допустим, у меня есть код ниже

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebGet(UriTemplate = "GetSample?part1={part1}&part2={part2}")]
    string GetSample(string part1, string part2);
}

Здесь часть 1 обязательна, а часть 2 необязательна.Теперь функция будет выглядеть следующим образом:

public class Service : IService
{
    public string GetSample(string part1, string part2)
    {
        if (!string.IsNullOrEmpty(part2))
        {
            return "Hello friends..." + part1 + "-" + part2;
        }
        return "Hello friends..." + part1;
    }
}

Вы также можете выполнить преобразование на основе ваших требований.

0 голосов
/ 23 июня 2017

Вы должны использовать "?" с последующим "/" в вашем URL.

пример:

[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
    string GetSample(string part1);
...