要求されたリソースが見つからないなど、WCF REST 呼び出しで問題が発生した場合、OperationContract メソッドで HTTP 応答コード (たとえば、HTTP 404 などに設定) を操作するにはどうすればよいですか?
7 に答える
WebOperationContext
アクセスできるがあり、設定可能なプロパティを持つOutgoingResponse
typeのプロパティがあります。OutgoingWebResponseContext
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 message)という組み込みのメソッドがあり、1回の呼び出しでステータスコードとステータスの説明を404に設定します。
1回の呼び出しでステータスコードを201に設定し、ロケーションヘッダーを設定するSetStatusAsCreated(Uri location)もあることに注意してください。
ヘッダーにステータスの説明を表示したい場合は、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());
これは、WCF Data Services ではうまくいきませんでした。代わりに、Data Services の場合は DataServiceException を使用できます。次の投稿が役に立ちました。 http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de