Tengo un servicio casi con la firma exacta. Puedo pasar valores que tienen un "." en el nombre. Por ejemplo, esto funcionaría en la mía:
[OperationContract]
[WebGet(UriTemplate = "category/{id}")]
string category(string id);
con la url http://localhost/MyService.svc/category/test.category
consigo el valor ` "test.category" pasa como el valor de cadena.
Debe haber algún otro problema. ¿Cómo estás accediendo a la URL? solo directamente en el navegador? ¿O a través de una llamada javascript? Solo me pregunto si es algún error en el lado del cliente. El servidor pasa el valor muy bien. Recomendaría intentar acceder a la URL en su navegador, y si no funciona, publique exactamente qué URL está utilizando y cuál fue el mensaje de error.
Además, ¿está utilizando WCF 3.5 SP1 o solo WCF 3.5? En el libro de RESTFul .Net que estoy leyendo, veo que hubo algunos cambios con respecto a UriTemplate.
Y finalmente, modifiqué un servicio simple del libro RESTFul .Net que funciona y obtengo la respuesta correcta.
class Program
{
static void Main(string[] args)
{
var binding = new WebHttpBinding();
var sh = new WebServiceHost(typeof(TestService));
sh.AddServiceEndpoint(typeof(TestService),
binding,
"http://localhost:8889/TestHttp");
sh.Open();
Console.WriteLine("Simple HTTP Service Listening");
Console.WriteLine("Press enter to stop service");
Console.ReadLine();
}
}
[ServiceContract]
public class TestService
{
[OperationContract]
[WebGet(UriTemplate = "category/{id}")]
public string category(string id)
{
return "got '" + id + "'";
}
}
+1 para la sugerencia de cadena de consulta. Los períodos funcionaron bien en cualquier parte de la solicitud, excepto al final. –
¿Cómo se ve la UriTemplate (y la URL) cuando se pegan parámetros en la cadena de consulta? – dumbledad