configurar binding wcf
ParĂ¡metros de cadenas de consulta opcionales en URITemplate en WCF? (5)
Estoy desarrollando algunos servicios RESTful en WCF 4.0. Tengo un método como el siguiente:
[OperationContract]
[WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)]
public string TestXml(string records)
{
return "Hello XML";
}
Entonces, si navego en mi navegador a http://localhost:8000/Service/Test?format=XML&records=10 , todo funciona como se exepto.
SIN EMBARGO, quiero poder navegar a http://localhost:8000/Service/Test?format=XML y dejar fuera la porción "& records = 10" de la URL. Pero ahora, recibo un error de servicio ya que el URI no coincide con la plantilla de URI esperada.
Entonces, ¿cómo implemento los valores predeterminados para algunos de mis parámetros de cadena de consulta? Quiero establecer los "registros" por defecto a 10, por ejemplo, si esa parte se deja fuera de la cadena de consulta.
Esto parece funcionar en WCF 4.0.
Solo asegúrese de establecer su valor predeterminado en su "Service1.svc.cs"
public string TestXml(string records)
{
if (records == null)
records = "10";
//... rest of the code
}
Mira esta publicación de blog. Tiene sentido para mí y viene con una clase para analizar los parámetros de la cadena de consulta.
Básicamente, no defina los parámetros de cadena de consulta en UriTemplate para que coincida con / sin los parámetros, y use la clase de muestra para recuperarlos si están allí en la implementación del método.
Sí, puedo confirmar después de WCF 4.0 que funciona como un encanto como se describe aquí WCF y parámetros opcionales
Según esta respuesta, esto se soluciona en .NET 4.0. Si no se proporciona el parámetro de cadena de consulta, parece que se le asigna el valor predeterminado para el tipo.
Nota: esta pregunta no está actualizada, por favor vea las otras respuestas.
Esto no parece ser compatible.
Sin embargo, Microsoft se ha enterado de este problema y hay una solución alternativa:
Puede obtener el efecto deseado al omitir la cadena de consulta de UriTemplate en su atributo WebGet o WebInvoke, y usar WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters desde sus controladores para inspeccionar, establecer los valores predeterminados, etc. en los parámetros de consulta.
https://connect.microsoft.com/VisualStudio/feedback/details/451296/