Asp.net web api 从Orchard中的WebAPI返回JsonNet类型JSON

Asp.net web api 从Orchard中的WebAPI返回JsonNet类型JSON,asp.net-web-api,orchardcms,orchardcms-1.6,Asp.net Web Api,Orchardcms,Orchardcms 1.6,在标准MVC中,我使用JsonNet返回camelCase中的JSON,并成功序列化具有相关实体的实体(否则使用默认序列化程序报告“cycles”错误) 我也希望对Orchard模块中的WebAPI控制器执行同样的操作。默认情况下,当给定一个实体列表时,它返回PascalCase JSON并报告“cyles”异常 谁能解释一下如何最好地配置Orchard模块中的JSON输出,以模拟JsonNet将产生什么?我找到了一个解决方法,即在ActionFilter中将JSON格式化程序设置设置为came

在标准MVC中,我使用JsonNet返回camelCase中的JSON,并成功序列化具有相关实体的实体(否则使用默认序列化程序报告“cycles”错误)

我也希望对Orchard模块中的WebAPI控制器执行同样的操作。默认情况下,当给定一个实体列表时,它返回PascalCase JSON并报告“cyles”异常


谁能解释一下如何最好地配置Orchard模块中的JSON输出,以模拟JsonNet将产生什么?

我找到了一个解决方法,即在ActionFilter中将JSON格式化程序设置设置为camelCase:

    public class CamelCaseJsonAttribute : ActionFilterAttribute {

    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var jsonFormatter = actionContext.ControllerContext.Configuration.Formatters.OfType<JsonMediaTypeFormatter>().First();
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }
}
公共类CamelCaseJSonaAttribute:ActionFilterAttribute{
公共覆盖无效OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var jsonFormatter=actionContext.ControllerContext.Configuration.Formatters.OfType().First();
jsonFormatter.SerializerSettings.ContractResolver=新的CamelCasePropertyNamesContractResolver();
}
}
但这似乎效率低下,因为它是在每个请求上设置的,而不是全局设置的

我猜模块中的某个地方有一个扩展点来设置HttpConfiguration-有人能告诉我一种方法还是另一种方法吗


非常感谢。

不幸的是,Orchard的当前版本没有像MVC控制器那样为WebAPI控制器提供基于DI的过滤器/配置提供程序。我们希望很快实现这一功能-不一定是1.7版,可能是1.7.1版。在这之前,您需要设置全局配置、使用属性或附加到Autofac注册以设置自定义控制器配置。感谢您的回答,Piotr。了解路线图上的内容非常有用。