我使用NancyFx,我试图在问题之前找到答案。每个模块或每个路由序列化的NancyFx
我有一个单一的返回类型,每个模块,但在不同的URL路由我需要序列化它不同,只是具体的属性。 如果我在南希管道中连线序列化,它会触及所有路由。
是否可以自定义每个路由或模块的序列化,而无需在不同的命名空间中粘贴相同类型的副本?
我使用NancyFx,我试图在问题之前找到答案。每个模块或每个路由序列化的NancyFx
我有一个单一的返回类型,每个模块,但在不同的URL路由我需要序列化它不同,只是具体的属性。 如果我在南希管道中连线序列化,它会触及所有路由。
是否可以自定义每个路由或模块的序列化,而无需在不同的命名空间中粘贴相同类型的副本?
我拿出2级的解决方案:
JsonConvert
属性对应重写道具;string
。不确定在没有更好理解要求的情况下明确推荐什么。
考虑实施响应处理器。
在您的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指定的 默认模型。
如果我记得不错,你可以使用模块或路由管道,而不是应用程序级别的管道https://github.com/NancyFx/Nancy/wiki/The-before-and-after-module-hooks – mJehanno