WCF i opcje zaawansowane


Właśnie zacząłem używać WCF z REST i UriTemplates. Czy można teraz zastosować dodatkowe parametry?
Jeśli nie, co radzilibyście mi zrobić dla systemu, który ma trzy parametry, które są zawsze używane w adresie URL, i inne, które są opcjonalne (różne ilości)?
Przykład:
[url=https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free]https://example.com/%3Fid%3DID ... Dfree[/url]

  • id, typ, język są zawsze obecne
  • tryb jest opcjonalny

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Właśnie przetestowałem to z WCF 4 i działało bez problemu. Jeśli nie używam trybu w ciągu zapytania, otrzymuję wartość parametru null:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetData?data={value}&mode={mode}")]
string GetData(string value, string mode);
}

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

Wydaje mi się, że wszystkie parametry ciągu zapytania są opcjonalne. Jeśli parametr nie występuje w ciągu zapytania, będzie miał domyślną wartość dla jego type = & >
null
dla
string
, 0 dla
int  itp. itp. 

MS również wskazuje
[url=http://connect.microsoft.com/VisualStudio/feedback/details/451296/rest-wcf-uritemplate-optional-querystring-parameters]http://connect.microsoft.com/V ... eters[/url]
że należy to wdrożyć.
W każdym razie zawsze możesz zdefiniować
UriTemplate
z
id
,
type
i
language
i uzyskać dostęp do dodatkowych parametrów wewnątrz metody za pomocą
WebOperationContext
:
var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Próbowałem użyć dodatkowych parametrów w uspokajającej usłudze sieciowej,
Jeśli nie przekażemy niczego w wartości parametru, to pozostaje ona pusta. Po tym możemy sprawdzić dostępność
funkcje null lub puste w. Jeśli jest null, nie używaj go, w przeciwnym razie możesz go użyć.
Powiedzmy, że mam poniższy kod
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetSample?part1={part1}&part2={part2}")]
string GetSample(string part1, string part2);
}

Tutaj część 1 i część 2 są opcjonalne.
Teraz funkcja będzie wyglądać tak
public class Service : IService
{
public string GetSample(string part1, string part2)
{
if (!string.IsNullOrEmpty(part2))
{
return "Hello friends..." + part1 + "-" + part2;
}
return "Hello friends..." + part1;
}
}

Możesz również dokonać konwersji zgodnie ze swoimi wymaganiami.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Musisz użyć znaku „?”, A po nim „/” w swoim adresie URL.
przykład:
[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
string GetSample(string part1);

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się