ejemplo - wcf service c# example
¿Cómo puedo devolver un código de estado HTTP personalizado desde un método WCF REST? (7)
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?
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
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 configurará 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 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;
}
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 );
También puede devolver un código de estado y cuerpo de razón con StatusCode y StatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
Existe un WebOperationContext
que puede acceder y tiene una propiedad OutgoingResponse
de tipo OutgoingWebResponseContext
que tiene una propiedad StatusCode
que se puede establecer.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());