.net servicios ¿Puedo pasar el servicio RESTful de WCF que no sea una cadena al UriTemplate?




web api ejemplo (4)

Lamentablemente debes hacer el análisis tú mismo si quieres usar UriTemplate .

¿Puedo hacer lo siguiente?

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

Me gustaría que mi servicio funcione como servicio RESTful y como servicio SOAP de estilo RPC. Si es posible, me gustaría retener int como int, y no hacer el análisis a mano.


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

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

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


Si recuerdo correctamente, 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.


Como mencionaron otros, debe usar cadenas de consulta para pasar parámetros que no sean cadenas. El siguiente artículo detalla cómo se realiza el análisis sintáctico.

Extensibilidad WCF - QueryStringConverter

Volviendo a la extensión de WCF "adecuada", la publicación de esta semana trata del QueryStringConverter. Este es un tema simple que debe cubrirse, ya que su propósito es bastante específico (a diferencia de otros puntos de extensibilidad vistos anteriormente, que podrían usarse para una amplia variedad de casos): dentro de WCF, QueryStringConverter solo se usa en puntos finales que tienen el WebHttpBehavior aplicado para ellos E incluso en aquellos, solo en operaciones que tienen parámetros pasados ​​a través de cadenas de consulta (operaciones con parámetros marcados con [WebGet] o una operación [WebInvoke] con una UriTemplate que vincula explícitamente algunos parámetros a la cadena de consulta). 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 WebHttpBehavior admite de forma nativa varios tipos, incluidos todos los tipos numéricos simples (Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal), Boolean, Char, Object, String, DateTime , DateTimeOffset, TimeSpan, Guid, Uri y arrays de Byte (esencialmente, todos los tipos que DataContractSerializer considera que son "primitivos", con la excepción de XmlQualifiedName). Los tipos de enumeración también son compatibles por defecto (se usa la representación de cadena de los valores enum). Por último, también hay otro conjunto de tipos que son compatibles con QueryStringConverter por defecto, cualquiera que declare un atributo [TypeConverter] con un convertidor de tipo que puede convertir el tipo hacia y desde cadenas (más sobre eso a continuación).





rest