WCF и необязательные параметры

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

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

Пример:

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

3 ответа

Решение

Я только что протестировал его с 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 за string0 для intи т.д. MS также заявляет, что это должно быть реализовано.

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

var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];

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

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

Здесь part1 является обязательным, а part2 необязательным. Теперь функция будет выглядеть

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

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

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

пример:

[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
    string GetSample(string part1);
Другие вопросы по тегам