2009-02-13 11 views

Respuesta

67

Si no recuerdo mal, las variables de UriTemplate en la ruta siempre se resuelven en cadenas cuando se usa WebGet o WebInvoke. Solo puede vincular variables de UriTemplate a int, long, etc. cuando se encuentren en la parte de consulta de UriTemplate.

+0

Estoy usando una matriz dentada, y está mostrando este mensaje. ¿Hay alguna forma de pasar la matriz dentada a los params? Lo estoy haciendo así 'string MyMethod (string [] [] jaggedArray);' – CodeIt

3

Lamentablemente debe realizar el análisis usted mismo si desea utilizar el UriTemplate.

72

Como se mencionó dthrasher, mueva el id a la parte de la consulta del URI. Esto funcionó para mí: "esquema URI"

[OperationContract] 
[WebGet(UriTemplate = "/foo?id={id}")] 
string GetFoo(int id); 

Ver en Wikipedia para obtener más información sobre las diferentes partes de un URI: http://en.wikipedia.org/wiki/URI_scheme

+0

¡Gracias! Esto también elimina la necesidad de parámetros en un orden específico. – Jerry

+3

Gracias por darnos un ejemplo. – Cody

+0

Gracias, funciona –

4

Como otros han mencionado, debe utilizar las cadenas de consulta con el fin de pasar a la no - Parámetros de cadena. El siguiente artículo detalla cómo se realiza el análisis sintáctico.

WCF Extensibility – QueryStringConverter

Volviendo a WCF extensibilidad “adecuada”, el post de esta semana es sobre el QueryStringConverter. Esto es en realidad un tema simple para ser cubierto, ya que su propósito es bastante específico (a diferencia de otros puntos de extensibilidad visto antes, lo que podría ser utilizados para una amplia variedad de casos) - dentro de WCF la QueryStringConverter sólo se utiliza en los puntos finales que tienen el WebHttpBehavior aplicado a ellos. E incluso en ellos, sólo en las operaciones que tienen parámetros que se pasan a través de las cadenas de consulta (ya sean operaciones con los parámetros marcados con un [WebInvoke] operación con un UriTemplate que se une de forma explícita algunos parámetros para la cadena de consulta [WebGet] o) . Un QueryStringConverter es la pieza que puede convertir entre los parámetros de operación y su representación en una cadena de consulta.

...

El QueryStringConverter predeterminado utilizado por el WebHttpBehavior soporta de forma nativa varios tipos, incluyendo todos los tipos numéricos simple (Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, individual, dobles, decimal), Boolean, Char, Object, String, DateTime, DateTimeOffset, TimeSpan, Guid, Uri, y matrices de Byte (esencialmente, todos los tipos que la DataContractSerializer considera que son “primitivos”, con la excepción de XmlQualifiedName). Los tipos de enumeración también son admitidos de manera predeterminada (la representación de cadena de los valores enum es utilizada). Finalmente, también hay otro conjunto de tipos soportados por el QueryStringConverter predeterminado - cualquiera que declare un atributo [TypeConverter] con un convertidor de tipo que puede convertir el tipo en cadenas (más sobre eso más adelante).

Cuestiones relacionadas