要求されたリソースが見つからないなど、WCF REST呼び出しで問題が発生した場合、OperationContractメソッドでHTTP応答コード(HTTP 404などに設定する)をどのように操作できますか?
回答:
ありWebOperationContext
あなたがアクセスすることができ、それが持っているOutgoingResponse
タイプのプロパティOutgoingWebResponseContext
があるStatusCode
設定することができますプロパティを。
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
ただし、をスローしても機能するようです。
理由本文を返す必要がある場合は、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());
ref:https : //social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf
これは、WCF Data Servicesでは機能しませんでした。代わりに、Data Servicesの場合はDataServiceExceptionを使用できます。次の投稿は役に立ちました。 http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de