Como posso devolver um código de status HTTP personalizado a partir de um método WCF resto?
Pergunta
Se algo der errado em uma chamada WCF REST, como o recurso solicitado não for encontrado, como eu posso jogar com o código de resposta HTTP (defini-lo para algo como HTTP 404, por exemplo) no meu método OperationContract?
Solução
Há um WebOperationContext
que você pode acessar e tem um OutgoingResponse
propriedade do tipo OutgoingWebResponseContext
que tem um StatusCode
propriedade que pode ser definido.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
Outras dicas
Se você precisa retornar um corpo razão, então dê uma olhada no WebFaultException
Por exemplo
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
Para 404 há um construído em método no WebOperationContext.Current.OutgoingResponse chamado SetStatusAsNotFound (mensagem de texto) que irá definir o código de status de 404 e uma descrição do status com uma chamada.
Note também existe, SetStatusAsCreated (Uri local) que irá definir o código de status de 201 e cabeçalho local com uma chamada.
Se você deseja ver a descrição de status no cabeçalho, método RESTO deve certificar-se nulo retorno da seção de captura () como a seguir:
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());
Você também pode retornar um corpo statuscode e razão com WebOperationContext 's StatusCode e StatusDescription :
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
Isto não funcionou para mim para WCF Data Services. Em vez disso, você pode usar DataServiceException no caso de serviços de dados. Encontrado o seguinte útil pós. http://social.msdn.microsoft .com / Fórum / en / adodotnetdataservices / thread / f0cbab98-fcd7-4248-af81-5f74b019d8de