我如何从一个WCF REST方法返回一个自定义HTTP状态代码?(How can I return

2019-07-17 12:18发布

如果事情在WCF REST调用出错,比如在我的OperationContract的方法所请求的资源没有找到,我可以怎样利用HTTP响应代码玩(像HTTP 404设置的东西,例如)?

Answer 1:

有一个WebOperationContext您可以访问它有一个OutgoingResponse类型的财产OutgoingWebResponseContext具有StatusCode可以设置的属性。

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


Answer 2:

如果您需要返回的原因身体,然后看看WebFaultException

例如

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


Answer 3:

对于404有一个内置的方法在称为SetStatusAsNotFound(字符串消息)WebOperationContext.Current.OutgoingResponse,将设置状态码404,并用一个呼叫的状态的说明。

请注意,还有,SetStatusAsCreated(URI位置),将状态码设置为201和位置报头与一个呼叫。



Answer 4:

如果您希望看到标题中的状态描述,REST方法应该确保下面从捕捉(返回null)部分:

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}


Answer 5:

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



Answer 6:

这并没有为我工作的WCF数据服务。 相反,你可以在数据服务的情况下使用DataServiceException。 发现以下职位有用。 http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de



Answer 7:

您还可以返回的StatusCode和身体的原因与WebOperationContext的的StatusCode和状态说明 :

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


文章来源: How can I return a custom HTTP status code from a WCF REST method?
标签: c# .net wcf rest