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

如果在WCF REST调用中出现问题,例如请求的资源未find,那么我怎么能在我的OperationContract方法中使用HTTP响应代码(例如,将其设置为像HTTP 404这样的代码)呢?

有一个可以访问的WebOperationContext ,它有一个types为OutgoingWebResponseContextOutgoingResponse属性,它具有可以设置的StatusCode属性。

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

如果你需要返回一个理由体,那么看看WebFaultException

例如

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

对于404, WebOperationContext.Current.OutgoingResponse中有一个内置的方法,称为SetStatusAsNotFound(string消息) ,它将状态码设置为404和一个调用的状态描述。

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

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

 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

这对WCF数据服务无效。 相反,您可以在Data Services的情况下使用DataServiceException。 find以下post有用。 http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de