89

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

4

7 回答 7

118

有一个WebOperationContext你可以访问的,它有一个OutgoingResponse类型的属性,OutgoingWebResponseContext它有一个StatusCode可以设置的属性。

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
于 2008-09-26T15:16:29.730 回答
77

如果您需要返回原因正文,请查看WebFaultException

例如

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
于 2010-11-24T11:44:27.813 回答
24

对于 404, WebOperationContext.Current.OutgoingResponse上有一个名为SetStatusAsNotFound(string message)的内置方法,该方法将状态代码设置为 404,并通过一次调用设置状态描述。

请注意,还有SetStatusAsCreated(Uri location)将通过一次调用将状态代码设置为 201 和位置标头。

于 2008-09-26T16:54:10.323 回答
4

You can also return a statuscode and reason body with WebOperationContext's StatusCode and StatusDescription:

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
于 2018-05-24T09:16:43.020 回答
2

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

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}
于 2011-03-18T15:51:31.663 回答
1
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());

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

于 2015-08-17T07:53:52.063 回答
0

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

于 2011-04-04T16:17:05.630 回答