web-dev-qa-db-ja.com

WCF RESTメソッドからカスタムHTTPステータスコードを返すにはどうすればよいですか?

WCF REST呼び出しで要求されたリソースが見つからないなどの問題が発生した場合、HTTP応答コード(たとえばHTTP 404などの設定) OperationContractメソッド?

86
kgriffs

アクセスできる WebOperationContext があり、 OutgoingResponse タイプのプロパティ OutgoingWebResponseContext 設定可能な StatusCode プロパティがあります。

WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
107
Eric Schoonover

Reason bodyを返す必要がある場合は、 WebFaultException をご覧ください

例えば

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
70
Graeme Bradbury

404の場合、WebOperationContext.Current.OutgoingResponse called SetStatusAsNotFound(string message)に組み込みメソッドがあり、1回の呼び出しでステータスコードを404とステータスの説明に設定します。

SetStatusAsCreated(Uri location)があることに注意してください。これは、ステータスコードを201に設定し、1回の呼び出しでロケーションヘッダーを設定します。

23
JarrettV

ヘッダーにステータスの説明を表示する場合、RESTメソッドは、以下のようにCatch()セクションから必ずnullを返す必要があります。

catch (ArgumentException ex)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
    return null;
}
2
Hydtechie

WebOperationContextStatusCode および StatusDescription を使用して、ステータスコードと理由本文を返すこともできます。

WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
1
eitzo
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

1
user5234326

これは、WCF Data Servicesでは機能しませんでした。代わりに、Data Servicesの場合にDataServiceExceptionを使用できます。次の投稿が役に立ちました。 http://social.msdn.Microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

0
OnlyMahesh