サービスレイヤによって要求されたリソースが見つからない場合は、nullをWeb APIコントローラに返します。コントローラーでハードコーディングを行わずにクライアントに返信するHttpStatusCode.NotFound
を送信し、それがヌルであるかどうかを確認する最も良い方法は何ですか?ASP.NET Web APIとNull応答のステータスコード
8
A
答えて
15
個人的には、私はちょうどOppositionalのコメントに従ってコントローラーのチェックを行いますが、あなたが求めているのは完全に合理的です。
例モデル:
public class Foo
{
public string Bar { get; set; }
}
例コントローラー:
public class FoosController : ApiController
{
[NullObjectActionFilter]
public Foo Get(string id)
{
// - Returns model and 200
//return new Foo() { Bar = "TEST" };
// - Returns 404
//return null;
}
}
フィルタ:
再びアクションフィルタコントローラごとに添付(またはグローバルに登録)のいずれかを使用して、あなたはこれらの線に沿って何かを行うことができますpublic class NullObjectActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
object outValue = null;
actionExecutedContext.Response.TryGetContentValue<object>(out outValue);
if (outValue == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
base.OnActionExecuted(actionExecutedContext);
}
}
11
私はActionFilterが行く方法であることに同意します。小さな行動方法は良いにおいです。
ただし、例外が発生した場合は、HttpActionExecutedContext.Response
をnull
とすることができます。上記のNullObjectActionFilterクラスは、エラーHTTPステータスコードを隠す可能性があります。成功した終了と成功したHTTPコードを確認する方がよいでしょう。
ここで私が使用してアクションフィルタです:
/// <summary>
/// Converts <c>null</c> return values into an HTTP 404 return code.
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class NullResponseIs404Attribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if ((actionExecutedContext.Response != null) && actionExecutedContext.Response.IsSuccessStatusCode)
{
object contentValue = null;
actionExecutedContext.Response.TryGetContentValue<object>(out contentValue);
if (contentValue == null)
{
actionExecutedContext.Response = actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.NotFound, "Object not found");
}
}
}
}
関連する問題
- 1. Asp.net Web Api番号に応答ステータスコードを設定
- 2. OkHttp応答ステータスコード
- 3. コマンドラインcurlとプロキシおよび応答ステータスコード
- 4. 応答からHttpErrorを削除するASP.NET Web API
- 5. ASP.NET Web API応答を傍受するFormsAuthenticationModuleを防止する
- 6. Django未処理の例外応答ステータスコード
- 7. Webサービスの応答はnullですが、SOAPメッセージの応答は有効です
- 8. Unity WWW応答ステータスコードを取得
- 9. ASP.Net Webサービス応答時間が遅く
- 10. REST APIの応答
- 11. ASP.Net Web APIの応答モデルプロパティをエイリアスする方法はありますか
- 12. Webサービス呼び出しがnullの後の応答オブジェクトのプロパティ
- 13. ASP.NET WebService応答圧縮
- 14. ASP.NETカスタムエラーページHTTP応答
- 15. ASP.NET WebServiceオーバーライドSOAP応答
- 16. NGINXリバースプロキシ:多くのhtmlステータスコード400の応答、なぜですか?
- 17. アフィリエートAPI応答の解析
- 18. Stackoverflow APIの応答形式
- 19. スローワトソントーンアナライザAPIの応答時間
- 20. Rest APIの応答XML
- 21. Webビューのアクセス応答ヘッダー
- 22. ASP.NET Web APIとUrlDecode
- 23. ASP.NET Web APIとMonoDroid
- 24. Web APIコントローラでのJSON応答の作成
- 25. ASP.NetリダイレクトIFrameへの応答
- 26. ASP.NET MVC Json 404の応答
- 27. APNSエラー応答パケットでの異なるステータスコードの意味
- 28. ASP.net JSON Webサービスの問題の応答タイプ
- 29. C#asp.netでFacebook apiの応答データを管理するには?
- 30. プリフライトの応答に無効なHTTPステータスコード405
あなたは、コントローラのアクションメソッド内NOTFOUND状態で応答メッセージを返すことができますどちらか。例外をスローし、グローバルフィルタで例外タイプを適切なレスポンスにマップさせることもできます。私はnullをチェックすることがなぜ問題になるのかよく分かりません。コントローラーのアクションロジックは、さまざまな条件を処理し、適切なステータスコードでレスポンスにマップする必要があります。 – Oppositional
私はあなたのようなグローバルフィルタを持っています。私はすべてのコントローラアクションでこれらのヌルチェックをしたくない。 –