2017-09-06 86 views
0

我使用NancyFx,我試圖在問題之前找到答案。每個模塊或每個路由序列化的NancyFx

我有一個單一的返回類型,每個模塊,但在不同的URL路由我需要序列化它不同,只是具體的屬性。 如果我在南希管道中連線序列化,它會觸及所有路由。

是否可以自定義每個路由或模塊的序列化,而無需在不同的命名空間中粘貼相同類型的副本?

+0

如果我記得不錯,你可以使用模塊或路由管道,而不是應用程序級別的管道https://github.com/NancyFx/Nancy/wiki/The-before-and-after-module-hooks – mJehanno

回答

0

我拿出2級的解決方案:

  1. 派生類型JsonConvert屬性對應重寫道具;
  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指定的 默認模型。