2017-09-06 56 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指定的 默认模型。