如何从WCF REST方法返回自定义HTTP状态代码?

时间:2008-09-26 15:08:27

标签: c# .net wcf rest

如果在WCF REST调用中出现问题,例如找不到请求的资源,我如何在我的OperationContract方法中使用HTTP响应代码(例如将其设置为HTTP 404)?

7 个答案:

答案 0 :(得分:105)

您可以访问WebOperationContext,并且它具有OutgoingResponse类型的OutgoingWebResponseContext属性,该属性具有可以设置的StatusCode属性。

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

答案 1 :(得分:70)

如果您需要返回原因主体,请查看WebFaultException

例如

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

答案 2 :(得分:23)

对于404, WebOperationContext.Current.OutgoingResponse 上有一个内置方法,名为 SetStatusAsNotFound(字符串消息),它将状态代码设置为404并显示状态说明一个电话。

注意还有 SetStatusAsCreated(Uri位置),它会将状态代码设置为201,并通过一次调用设置位置标题。

答案 3 :(得分:2)

如果您希望在标题中看到状态描述,REST方法应确保从Catch()部分返回null,如下所示:

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

您还可以使用WebOperationContext StatusCodeStatusDescription返回状态代码和理由正文:

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

答案 6 :(得分:0)

这对我来说对WCF数据服务不起作用。相反,您可以在Data Services的情况下使用DataServiceException。发现以下帖子有用。 http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de