每个模块或每个路由序列化的NancyFx

时间:2017-09-06 13:59:36

标签: c# rest serialization nancy

我使用NancyFx,我试图在问题之前找到答案。

每个模块我有一个返回类型,但在不同的URL路由中,我需要以不同的方式序列化它,只是特定的属性。 如果我在Nancy管道中连接序列化,它会触及所有路由。

是否可以自定义每个路由或模块的序列化,而无需在不同的命名空间中粘贴相同类型的副本?

2 个答案:

答案 0 :(得分: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指定,如果失败。

答案 1 :(得分:0)

我想出了两个解决方案:

  1. 在相应的覆盖道具上具有public IActionResult SendResponse() { Response.Headers.Add("X-Total-Count", "20"); return Ok(); } 属性的派生类型;
  2. 在模块中使用序列化并返回JsonConvert