2016-09-28 5 views
0

Ninjectインターセプタの一部として共通のバリデータを記述しました。私の要件は、一貫性のために、私のプロジェクトのサービスメソッドがどのように戻るかのように、レスポンスオブジェクトを返さなければならないということです。応答オブジェクトを返すことで、バリデータが失敗したときに適切な検証メッセージを返すのにも役立ちます。インターセプタではどうしたらいいですか?私は、Intercept()が何も返さないことを理解しました。私は例外を投げてみましたが、どこでそれを捕まえるべきかわかりません。誰か助けてくれますか?Ninjectインターセプタから何かを返す方法

public void Intercept(IInvocation invocation) 
    { 
     var validationFails = false; 

     if (validationFails) 
     { 
      // return an object 
      // response.ErrorMessage = "Validation Error" 

      // Or throw exception, but where should I catch it 
      throw new Exception(statusMessage); 
     } 
     else 
     { 
      invocation.Proceed(); 
     } 
    } 

答えて

0

サービスメソッドの代わりにビジネスレイヤーメソッドにインターセプターを接続し、応答の一部として適切な戻り値を返すことができました。

1

妥当性検査が失敗した場合にReturnValueを割り当てて、Proceedを呼び出さないでください。

public class MyRequestHandler 
{ 
    Response ProcessRequest(string input) { return new Response(); } 
} 

public MyValidationInterceptor : IInterceptor 
{ 
    public void Intercept(IInvocation invocation) 
    { 
     if (NeedsValidation(invocation.Method) && 
      !IsValidRequest((string)invocation.Arguments[0])) 
     { 
      invocation.ReturnValue = 
           new Response { ErrorMessage = "Validation Error" }; 
      return; 
     } 

     invocation.Proceed(); 
    } 
} 
+0

返信いただきありがとうございます。私もそれを試した。しかし何らかの理由で、私のサービスコールは常に「400 Bad Request」と表示し、何も返さなかった。 – Skip

+0

私はMyServiceMethod()を呼び出し、インターンはビジネスメソッドを呼び、サービスの呼び出しを行っています。サービスプロジェクトに登録されたインターセプタがあり、サービスコールを開始する前にトリガされます。したがって、インターセプタがオブジェクトを返すとき、それは常に '400 Bad Request'です。私のカーソルはまだサービスメソッドに当たっていません。 しかし、インターセプターをビジネスプロジェクトに登録しようとしたところ、インターセプターで設定したものを返すことができました。唯一の違いは、私は今サービスメソッドにヒットし、インターセプタに入り、何かを返すことができたということです。 – Skip

+0

パブリックオブジェクトMyServiceMethod(int param) { \t return BusinessLayer.MyBusinessMethod(int param); } これは私にとっては奇妙なようです。なぜ私は何かを返すことができなかった、サービスメソッドを打つ前に、私はメソッドに入力した後、返すことができます。 soemthingを返すには、それはある方法でなければならないのですか?それは意味をなさないでしょうか?私はここに何かを逃していますか – Skip

関連する問題