.net - que - parametros por referencia c#
WCF y parĂ¡metros opcionales (3)
Acabo de probarlo con WCF 4 y funcionó sin problemas. Si no uso el modo en la cadena de consulta obtendré un valor nulo como valor de parámetro:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetData?data={value}&mode={mode}")]
string GetData(string value, string mode);
}
Implementación del método:
public class Service : IService
{
public string GetData(string value, string mode)
{
return "Hello World " + value + " " + mode ?? "";
}
}
Para mí, parece que todos los parámetros de cadena de consulta son opcionales. Si un parámetro no está presente en la cadena de consulta, tendrá un valor predeterminado para su tipo => null
para la string
, 0 para la int
, etc. MS también indica que esto debe implementarse.
De todos modos, siempre puede definir UriTemplate
con id
, type
e language
y acceder a los parámetros opcionales dentro del método de WebOperationContext
:
var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];
Acabo de empezar a usar WCF con REST y UriTemplates. ¿Es posible ahora usar parámetros opcionales?
Si no, ¿qué recomendarían hacer para un sistema que tiene tres parámetros que siempre se usan en la URL y otros que son opcionales (cantidad variable)?
Ejemplo:
https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free
- Identificación, tipo, idioma siempre están presentes
- el modo es opcional
He intentado con parámetros opcionales en un servicio web reparador. Si no pasamos nada en el valor del parámetro, permanece nulo. Después de eso podemos verificar la función nula o vacía. Si es nulo, entonces no lo uses, de lo contrario puedes usarlo. Digamos que tengo debajo del código
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetSample?part1={part1}&part2={part2}")]
string GetSample(string part1, string part2);
}
Aquí part1 es obligatorio y part2 es opcional. Ahora la función se vería como
public class Service : IService
{
public string GetSample(string part1, string part2)
{
if (!string.IsNullOrEmpty(part2))
{
return "Hello friends..." + part1 + "-" + part2;
}
return "Hello friends..." + part1;
}
}
También puede hacer la conversión en función de sus necesidades.
Tienes que usar "?" seguido de "/" en tu URL.
ejemplo:
[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
string GetSample(string part1);