如果WCF REST调用中出现问题,例如找不到请求的资源,我该如何在OperationContract方法中使用HTTP响应代码(例如,将其设置为HTTP 404之类的东西)?
Answers:
有一个WebOperationContext
您可以访问的OutgoingResponse
属性,并且它具有一个类型可以设置OutgoingWebResponseContext
的StatusCode
属性。
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
但是,抛出a 似乎确实有效。
如果需要返回原因正文,请查看WebFaultException
例如
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
来返回HttpStatusCode.Created
吗?
如果希望在标题中看到状态描述,REST方法应确保从Catch()部分返回null,如下所示:
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
您还可以使用WebOperationContext的StatusCode和StatusDescription返回状态码和原因正文:
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
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
对于WCF数据服务,这对我不起作用。相反,如果是数据服务,则可以使用DataServiceException。发现以下帖子有用。 http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de