如何从WCF REST方法返回自定义的HTTP状态码?
如果在WCF REST调用中出现问题,例如请求的资源未find,那么我怎么能在我的OperationContract方法中使用HTTP响应代码(例如,将其设置为像HTTP 404这样的代码)呢?
有一个可以访问的WebOperationContext
,它有一个types为OutgoingWebResponseContext
的OutgoingResponse
属性,它具有可以设置的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