Si algo falla en una llamada WCF REST, como que no se encuentra el recurso solicitado, ¿cómo puedo jugar con el código de respuesta HTTP (por ejemplo, configurándolo en HTTP 404) en mi método OperationContract?¿Cómo puedo devolver un código de estado HTTP personalizado desde un método WCF REST?
Respuesta
Hay una WebOperationContext
que se puede acceder y tiene una propiedad de tipo OutgoingResponse
OutgoingWebResponseContext
que tiene una propiedad StatusCode
que se puede ajustar.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
¿Funciona esto dentro de WCF Data Services - Service Operations? No he tenido suerte, parece que StatusCode I set es superado por otra cosa. Entonces, en todas las solicitudes HTTP POST, obtengo 204 independientemente de que lo configuré en 201, etc. – RyBolt
No funciona en mi caso, el estado se sobrescribe. Sin embargo, lanzar una 'WebFaultException' parece funcionar. –
Por 404 hay una construida en el método de la WebOperationContext.Current.OutgoingResponse llamada SetStatusAsNotFound (mensaje de cadena) que establecerá el código de estado de 404 y una descripción de estado con una sola llamada.
Tenga en cuenta que también hay SetStatusAsCreated (ubicación de Uri) que establecerá el código de estado en 201 y el encabezado de ubicación con una llamada.
¿Se prefiere esto al método mostrado en la respuesta aceptada? – crush
Si necesita devolver un cuerpo razón entonces echar un vistazo a WebFaultException
Por ejemplo
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest);
Me gusta más que la aceptada, ya que no estamos usando el WebOperationContext.Current estático –
tenga en cuenta que esto solo es válido desde famework 4 http://msdn.microsoft.com/en-us/library/dd989924.aspx – sebagomez
hmm, en .NET 4.5.1 esto no está configurando el código de estado para mí, todavía obtengo un 200. Estoy usando jsonp, está llamando mi devolución de llamada (en javascript) y pasando mi mensaje y mi código de estado como un entero. – Shavais
Si desea ver la descripción de estado en la cabecera, el método resto debe asegurarse de volver null desde la sección Catch() como se muestra a continuación:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
Esto tampoco funcionó para mí, todavía obtengo un 200. Estoy usando WebHttpBinding con crossDomainScriptAccessEnabled = "true" y un comportamiento de punto final de webHttp con un estilo de cuerpo predeterminado de wrap y un formato de respuesta saliente predeterminado de json. .pero eso no debería importar, ¿o sí? – Shavais
Esto no funcionó para mí para WCF Data Services. En cambio, puede usar DataServiceException en el caso de los servicios de datos. Encontré la siguiente publicación útil. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de
Eso tampoco me funciona, solo recibo una 400 Solicitud incorrecta, sin otra información útil y sin respuesta. – Shavais
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
- 1. ¿Cómo puedo devolver un código de estado 404/50x desde un controlador Grails?
- 2. ¿Cómo puedo devolver un tipo anónimo desde un método?
- 3. Si falla un método REST API, ¿debo devolver un mensaje de estado HTTP 200, 400 o 500?
- 4. ¿Cómo puedo devolver NULL desde un método genérico en C#?
- 5. Devolver una interfaz desde un servicio WCF
- 6. ¿Cuál es el código de estado HTTP apropiado que debe devolver un servicio API REST para una falla de validación?
- 7. Devolver JSON envuelto en una función de devolución de llamada desde un servicio web WCF REST
- 8. ¿Hay alguna manera de devolver diferentes tipos de un método WCF REST?
- 9. Agregar HTTP auth básico a un servicio WCF REST
- 10. Python CGI devuelve un código de estado http, como 403?
- 11. ¿Cómo devolver Json desde WCF Service?
- 12. una imagen de un servicio WCF REST
- 13. ¿Debería un método de interfaz devolver un objeto personalizado?
- 14. ¿Cómo puedo obtener el código de estado HTTP de un ServletResponse en un ServletFilter?
- 15. Devolver la excepción de error personalizado WCF
- 16. ¿Cuál es el código de estado HTTP más apropiado para devolver si falta un encabezado requerido?
- 17. ¿cómo verifico un código de estado de respuesta de solicitud HTTP desde iOS?
- 18. ¿Cómo se especifica un código de estado HTTP en Cakephp?
- 19. Cómo agregar un estado de botón personalizado
- 20. código de estado HTTP 400 vs 412
- 21. ¿Cómo hacer que el manejador de errores WCF personalizado devuelva la respuesta JSON con un código http incorrecto?
- 22. Delphi XE2: ¿Cómo definir un URI de REST DataSnap personalizado?
- 23. ¿Puedo usar razones personalizadas para un código de estado HTTP para diferenciar entre errores para una API REST?
- 24. Cómo devolver una lista de arrays desde un método
- 25. ¿Cómo devolver 2 valores desde un método Java?
- 26. Cómo detectar el estado HTTP desde JavaScript
- 27. El servicio WCF 4 REST no puede devolver un StatusDescription, solo StatusCode
- 28. Código de estado HTTP para datos incorrectos
- 29. Cómo devolver una imagen PNG desde el método de servicio REST de Jersey al navegador
- 30. ¿Cómo puedo aplicar un método nulo para devolver Void desde un objeto Stub?
bien todas las respuestas a este control asumir lo hizo en su implementación del servicio. ¿Qué pasa si pasan algún uri totalmente inválido? ¿cómo se supone que debe proporcionar un 404 para todos los éxitos inesperados en su servicio? –