0

新しいエントリを送信するときに、コントローラーで次のコードを使用しています。

    // POST /api/Content/
    public HttpResponseMessage PostContent(Content content)
    {
        try
        {
            content.ModifiedDate = DateTime.Now;
            _uow.Contents.Add(content);
            _uow.Commit();
            var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content);
            return response;
        }
        catch (DbUpdateException ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
        } 
    }

これは DbUpdateExceptions のみをピックアップするため、別の種類の例外がある場合は、別の方法で処理する必要があると思います。

他の例外をどのように処理すべきかを誰かが提案できますか?

4

2 に答える 2

2

最も特殊なものから最も一般的なものまで、いくつかのキャッチを連続して追加できます

try
{
      content.ModifiedDate = DateTime.Now;
      _uow.Contents.Add(content);
      _uow.Commit();
      var response = Request.CreateResponse<Content>(HttpStatusCode.Created, content);
      return response;
}
catch (DbUpdateException ex)
{
     return Request.CreateErrorResponse(HttpStatusCode.Conflict, ex);
} 
catch (Exception ex)
{
     // do what you want
} 
于 2013-07-28T06:40:57.810 に答える
0

手早く汚れた方法から、より長く安全な方法に移行したい場合は、次の手順を実行できます。

  1. 別のオブジェクトでデータ アクセスをカプセル化し、その例外を処理して、外部のカスタム例外に渡します。単一のカスタム例外の下にすべてのデータ アクセス例外を非表示にすることができます。

  2. (@Massanuが指摘したように)最も一般的なものから最も特殊なものまで、ハンドラを連結します。catch (Exception ex)さまざまな例外に適切に対応するには、単一のハンドラーを使用しないでください。

  3. 何かが実際に未処理のままになっている場合は、次のApplication_Error方法で それをキャッチできますglobal.asax: http://msdn.microsoft.com/ru-ru/library/24395wz3(v=vs.100).aspx

Steve Macconell によって書かれた Code Complete book にエラー処理に関する良い章があります: http://cc2e.com/

于 2013-07-28T07:07:56.077 に答える