Redirigir a otra URL desde una función WCF REST sin devolver HTTP 302

Tengo un servicio REST que recibe una solicitud GET y quiero que pueda redirigir a una de tres direcciones URL, sin tener que enviar un http 302 error y la nueva url.

    [OperationContract(Name = "MyService")]
    [WebGet(ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/myservice/{option}")]
    public System.IO.Stream MyService(String option)

Así lo tengo definido, pero cuando miro WebOperationContext.Current.OutgoingResponse No tengo un método para redirigir.

¿Hay alguna manera de hacer esto automáticamente? La razón por la que espero hacer esto es que este servicio web puede ser llamado por un programa, y ​​sería más simple en el programa no tener que detectar el error 302 y luego hacer la redirección manualmente.

Parece que la forma correcta es seguir esto: http://christopherdeweese.com/blog2/post/redirecting-from-a-wcf-rest-service

y haz esto:

WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Redirect;
WebOperationContext.Current.OutgoingResponse.Location = "/someOtherPage.aspx";
return null; 

Solo espero encontrar otra solución.

preguntado el 03 de mayo de 12 a las 12:05

1 Respuestas

La redirección siempre es una característica del lado del cliente. El servidor simplemente informa al cliente que el recurso está en otra parte. No hay nada como la redirección del lado del servidor, excepto ocultar por completo esta redirección en una llamada de servicio separada de su operación actual.

Por cierto. REST se trata de una interfaz uniforme y las redirecciones (3xx) son parte de esta interfaz, por lo que si crea un servicio REST y desea dicha función, debe usarla de manera común. El cliente REST es responsable de manejar correctamente la interfaz uniforme.

contestado el 03 de mayo de 12 a las 13:05

Desafortunadamente, tiene razón, esperaba ocultar la redirección, pero ya agregué el código para la redirección, solo con la esperanza de encontrar una solución mejor (para mí). Gracias. - James Black

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.