C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#ASP.NET WebAPIで未処理の例外を処理するための例外フィルターを作成するにはどうすればよいですか?


例外フィルターは、コントローラーメソッドがHttpResponseException例外ではないunhandledexceptionをスローしたときに実行されます。 HttpResponseExceptionタイプは、HTTP応答を返すために特別に設計されているため、特殊なケースです。

例外フィルターは、System.Web.Http.Filters.IExceptionFilterインターフェースを実装します。例外フィルターを作成する最も簡単な方法は、System.Web.Http.Filters.ExceptionFilterAttributeクラスから派生し、OnExceptionメソッドをオーバーライドすることです。

以下は、NotFiniteNumberException例外をHTTPステータスコード 416、要求された範囲が満たされないに変換するフィルターです。 。

ExceptionFilterAttribute

using System;
using System.Net;
using System.Net.Http;
using System.Web.Http.Filters;
namespace DemoWebApplication.Controllers{
   public class ExceptionAttribute : ExceptionFilterAttribute{
      public override void OnException(HttpActionExecutedContext context){
         if (context.Exception is NotFiniteNumberException){
            context.Response = new HttpResponseMessage(HttpStatusCode.RequestedRangeNotSatisfiable);
         }
      }
   }
}

コントローラーActionMethod

using DemoWebApplication.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
   [Exception]
   public class StudentController : ApiController{
      List<Student> students = new List<Student>{
         new Student{
            Id = 1,
            Name = "Mark"
         },
         new Student{
            Id = 2,
            Name = "John"
         }
      };
      public Student Get(int id){
         if(id <= 0){
            throw new NotFiniteNumberException("The Id is not valid");
         }
         var studentForId = students.FirstOrDefault(x => x.Id == id);
         return studentForId;
      }
   }
}

それでは、コントローラーアクションメソッドにid =0を渡して、上記のExceptionAttributeをテストしてみましょう。

C#ASP.NET WebAPIで未処理の例外を処理するための例外フィルターを作成するにはどうすればよいですか?

ExceptionAttributeは、次のいずれかの方法で登録できます。

  • 例外フィルターでアクションを装飾します。

[Exception]
   public IHttpActionResult Get(int id){
   Return Ok();
}
  • 例外フィルターでコントローラーを装飾します。

[Exception]
public class StudentController : ApiController{
   public IHttpActionResult Get(int id){
      Return Ok();
   }
}
  • WebApiConfig.csに例外をグローバルに登録します。

public static class WebApiConfig{
   public static void Register(HttpConfiguration config){
      config.Filters.Add(new ExceptionAttribute());
   }
}

  1. C#ASP.NET WebAPIでCORSの問題を解決するにはどうすればよいですか?

    クロスオリジンリソースシェアリング (CORS)は、追加のHTTPヘッダーを使用して、あるオリジンで実行されているWebアプリケーションに、別のオリジンから選択されたリソースへのアクセスを許可するようにブラウザーに指示するメカニズムです。 Webアプリケーションは、自身とは異なるオリジン(ドメイン、プロトコル、またはポート)を持つリソースを要求すると、クロスオリジンHTTPリクエストを実行します。 たとえば、フロントエンド(UI)とバックエンド(サービス)を持つアプリケーションについて考えてみましょう。フロントエンドがhttps://demodomain-ui.comから提供されているとしま

  2. JavaでJTableをフィルタリングするにはどうすればよいですか?

    JTable テーブルを作成および表示するための非常に柔軟な可能性を提供します。 TableModel インターフェイスは、テーブルの内容を指定するオブジェクトのメソッドを定義します。 AbstractTableModel クラスは通常、モデルテーブルのカスタム実装を提供するために拡張されます。 JTableクラスは、メソッド setCellEditor()を使用してテーブルを編集する機能を提供します。 TableCellEditorのオブジェクトを許可します インターフェイス。 フィルタリングできます setRowFilter()を使用したテーブル TableRowSort