2017-09-06 1 views
0

私はNancyFxを使用しています。私は質問の前に答えを見つけようとしました。モジュールごとまたはルート一元化ごとに

私はモジュールごとに1つの戻り値の型を持っていますが、異なるURLルートでは、それを別の方法で直列化する必要があります。 Nancyパイプラインでシリアライゼーションを配線すると、すべてのルートに接触します。

異なる名前空間に同じタイプをコピーしてコピーすることなく、ルートまたはモジュールごとにシリアル化をカスタマイズできますか?

+0

私がよく覚えているのは、アプリケーションレベルのパイプラインではなく、モジュールまたはルートのパイプラインを使用できることです。https://github.com/NancyFx/Nancy/wiki/The-before-and-after-module-hooks – mJehanno

答えて

0

私は2つのソリューションを作ってみた:オーバーライドされた小道具を対応する上JsonConvert属性を持つ

  1. 派生タイプ。
  2. モジュール内でシリアル化を使用し、stringを返します。
1

要件をよく理解していないと特に推奨することはありません。

応答プロセッサの実装を検討してください。

CanProcessの実装では、NancyContextを調べて、使用するシリアル化スキームのルールを評価できます。

例:

public ProcessorMatch CanProcess(MediaRange requestedMediaRange, dynamic model, NancyContext context) 
    { 
     return context.Request.Path != "/" && 
      !context.Request.Path.StartsWith("/someroute/") && 
      !context.Request.Path.StartsWith("/someotherroute") && 
      !context.Request.Path.StartsWith("/login") 
      ? new ProcessorMatch 
      { 
       ModelResult = MatchResult.DontCare, 
       RequestedContentTypeResult = MatchResult.ExactMatch 
      } 
      : new ProcessorMatch 
      { 
       ModelResult = MatchResult.DontCare, 
       RequestedContentTypeResult = MatchResult.NoMatch 
      }; 
    } 

https://github.com/NancyFx/Nancy/wiki/Content-Negotiation

を考えてみてください:ルートのWithMediaRangeModelを使用してコンテンツ交渉。

ネゴシエーション中に を使用するメディアタイプ固有のモデルを定義できます。ネゴシエーションパイプラインは、最初に を使用してメディアタイプ固有のモデルを検索し、失敗した場合はWithModelを使用して指定された デフォルトモデルにフォールバックします。

関連する問題