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?
88
Respuestas:
Hay un al
WebOperationContext
que puede acceder y tiene unaOutgoingResponse
propiedad de tipoOutgoingWebResponseContext
que tiene unaStatusCode
propiedad que se puede configurar.fuente
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 );
fuente
WebFaultException
para devolver unHttpStatusCode.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.
fuente
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; }
fuente
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";
fuente
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized; throw new WebException("令牌码不正确", new InvalidTokenException());
ref: https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf
fuente
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
fuente