Si algo sale mal en una llamada WCF REST, como por ejemplo, no se encuentra el recurso solicitado, ¿cómo puedo jugar con el código de respuesta HTTP (configurándolo en algo como HTTP 404, por ejemplo) en mi método OperationContract?
Si algo sale mal en una llamada WCF REST, como por ejemplo, no se encuentra el recurso solicitado, ¿cómo puedo jugar con el código de respuesta HTTP (configurándolo en algo como HTTP 404, por ejemplo) en mi método OperationContract?
Respuestas:
Hay un al WebOperationContext
que puede acceder y tiene una OutgoingResponse
propiedad de tipo OutgoingWebResponseContext
que tiene una StatusCode
propiedad que se puede configurar.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
, sin embargo, parece funcionar.
Si necesita devolver un cuerpo de motivo, eche un vistazo a WebFaultException
Por ejemplo
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
para devolver un HttpStatusCode.Created
?
Para 404 hay un método integrado en WebOperationContext.Current.OutgoingResponse llamado SetStatusAsNotFound (mensaje de cadena) que establecerá el código de estado en 404 y una descripción de estado con una 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.
Si desea ver la descripción del estado en el encabezado, el método REST debe asegurarse de devolver nulo 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;
}
También puede volver un cuerpo statuscode y razonar con WebOperationContext 's StatusCode y statusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
Esto no funcionó para mí para WCF Data Services. En su lugar, puede utilizar DataServiceException en el caso de los servicios de datos. Encontré útil la siguiente publicación. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de