C# NancyFx每个模块或每个路由序列化
我使用NancyFx,我试图在提问之前找到答案 我每个模块有一个单一的返回类型,但在不同的URL路由中,我需要以不同的方式序列化它,只需要特定的属性。 如果我在Nancy管道中连接序列化,它将涉及所有路由C# NancyFx每个模块或每个路由序列化,c#,rest,serialization,nancy,C#,Rest,Serialization,Nancy,我使用NancyFx,我试图在提问之前找到答案 我每个模块有一个单一的返回类型,但在不同的URL路由中,我需要以不同的方式序列化它,只需要特定的属性。 如果我在Nancy管道中连接序列化,它将涉及所有路由 是否可以自定义每个路由或模块的序列化,而无需在不同名称空间中复制粘贴相同类型?我提出了两种解决方案: 在相应的重写道具上具有jsonvert属性的派生类型 在模块内使用序列化并返回字符串 在没有更好地理解需求的情况下,不确定具体推荐什么 考虑实现一个响应处理器 在CanProcess的实现中,
是否可以自定义每个路由或模块的序列化,而无需在不同名称空间中复制粘贴相同类型?我提出了两种解决方案:
jsonvert
属性的派生类型李>
字符串
在没有更好地理解需求的情况下,不确定具体推荐什么 考虑实现一个响应处理器 在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
};
}
看
考虑:对路由使用WithMediaRangeModel进行内容协商
使您能够定义应使用的特定于介质类型的型号
在谈判期间。谈判管道将首先尝试
找到要使用的媒体类型特定的模型,并将回退到
默认模型,如果失败,则使用WithModel指定
如果我记得很清楚,您可以使用模块或路由管道,而不是应用程序级管道