Se algo der errado em uma chamada WCF REST, como o recurso solicitado não for encontrado, como posso brincar com o código de resposta HTTP (configurando-o para algo como HTTP 404, por exemplo) em meu método OperationContract?
Se algo der errado em uma chamada WCF REST, como o recurso solicitado não for encontrado, como posso brincar com o código de resposta HTTP (configurando-o para algo como HTTP 404, por exemplo) em meu método OperationContract?
Respostas:
Existe um WebOperationContext
que você pode acessar e tem uma OutgoingResponse
propriedade do tipo OutgoingWebResponseContext
que tem uma StatusCode
propriedade que pode ser definida.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
, no entanto, parece funcionar.
Se você precisar retornar um corpo de motivo, dê uma olhada em WebFaultException
Por exemplo
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
para retornar um HttpStatusCode.Created
?
Para 404, há um método integrado em WebOperationContext.Current.OutgoingResponse chamado SetStatusAsNotFound (mensagem de string) que definirá o código de status para 404 e uma descrição do status com uma chamada.
Observe que também há SetStatusAsCreated (local Uri) que definirá o código de status para 201 e o cabeçalho do local com uma chamada.
Se você deseja ver a descrição do status no cabeçalho, o método REST deve se certificar de retornar nulo da seção Catch () conforme abaixo:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
Você também pode retornar um código de status e um corpo de motivo com StatusCode e StatusDescription de WebOperationContext :
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());
Isso não funcionou para mim para o WCF Data Services. Em vez disso, você pode usar DataServiceException no caso de Data Services. Achei a seguinte postagem útil. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de