¿Cómo puedo devolver un código de estado HTTP personalizado desde un método WCF REST?

StackOverflow https://stackoverflow.com/questions/140104

  •  02-07-2019
  •  | 
  •  

Pregunta

Si algo sale mal en una llamada REST WCF, como 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?

¿Fue útil?

Solución

Hay un WebOperationContext al que puede acceder y tiene un OutgoingResponse propiedad de tipo OutgoingWebResponseContext que tiene un StatusCode propiedad que se puede configurar.

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;

Otros consejos

Si necesita devolver un cuerpo de razón, eche un vistazo a WebFaultException

Por ejemplo

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );

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 existe, SetStatusAsCreated (ubicación de Uri) que establecerá el código de estado en 201 y el encabezado de ubicación con una sola llamada.

Si desea ver la descripción del estado en el encabezado, el método REST debe asegurarse de devolver un valor nulo de 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;
}
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

También puede devolver un código de estado y un cuerpo de razón con WebOperationContext 's StatusCode y Descripción del estado :

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";

Esto no funcionó para mí para WCF Data Services. En su lugar, puede usar DataServiceException en el caso de Data Services. Encontré la siguiente publicación útil. http://social.msdn.microsoft .com / Forums / es / adodotnetdataservices / thread / f0cbab98-fcd7-4248-af81-5f74b019d8de

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top