Como posso devolver um código de status HTTP personalizado a partir de um método WCF resto?

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

  •  02-07-2019
  •  | 
  •  

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?

Foi útil?

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());

ref: https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top