WCF REST呼び出しで要求されたリソースが見つからないなどの問題が発生した場合、HTTP応答コード(たとえばHTTP 404などの設定) OperationContractメソッド?
アクセスできる WebOperationContext
があり、 OutgoingResponse
タイプのプロパティ OutgoingWebResponseContext
設定可能な StatusCode
プロパティがあります。
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
Reason bodyを返す必要がある場合は、 WebFaultException をご覧ください
例えば
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
404の場合、WebOperationContext.Current.OutgoingResponse called SetStatusAsNotFound(string message)に組み込みメソッドがあり、1回の呼び出しでステータスコードを404とステータスの説明に設定します。
SetStatusAsCreated(Uri location)があることに注意してください。これは、ステータスコードを201に設定し、1回の呼び出しでロケーションヘッダーを設定します。
ヘッダーにステータスの説明を表示する場合、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());
これは、WCF Data Servicesでは機能しませんでした。代わりに、Data Servicesの場合にDataServiceExceptionを使用できます。次の投稿が役に立ちました。 http://social.msdn.Microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de