在每个控制器的 ASP.NET WebAPI 上强制使用 CamelCase

Posted

技术标签:

【中文标题】在每个控制器的 ASP.NET WebAPI 上强制使用 CamelCase【英文标题】:Force CamelCase on ASP.NET WebAPI Per Controller 【发布时间】:2013-11-26 05:38:02 【问题描述】:

在 ASP.NET WebAPI 中,我知道您可以在 global.aspx 中使用 CamelCasePropertyNamesContractResolver() 将默认 json 格式化程序设置为使用驼峰式大小写,这将强制所有 json 序列化为驼峰式大小写。

但是,我需要能够在“每个控制器”实例上设置它,而不是全局解决方案。

这可能吗?

【问题讨论】:

【参考方案1】:

感谢@KiranChalla,我能够比我想象的更容易实现这一目标。

这是我创建的非常简单的类:

using System;
using System.Linq;
using System.Web.Http.Controllers;
using System.Net.Http.Formatting;
using Newtonsoft.Json.Serialization;

public class CamelCaseControllerConfigAttribute : Attribute, IControllerConfiguration 

  public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
  
    var formatter = controllerSettings.Formatters.OfType<JsonMediaTypeFormatter>().Single();
    controllerSettings.Formatters.Remove(formatter);

    formatter = new JsonMediaTypeFormatter
    
      SerializerSettings = ContractResolver = new CamelCasePropertyNamesContractResolver()
    ;

    controllerSettings.Formatters.Add(formatter);

  

然后只需将属性添加到您想要 CamelCase 的任何 Controller 类。

[CamelCaseControllerConfig]

【讨论】:

我相信这是 Kiran 指出的更好的解决方案。因为这个删除并添加了格式化程序,所以它是特定于控制器的。当我使用标记答案所指向的示例时,它会将我的所有控制器都更改为具有格式化程序,而不是特定于控制器。 谢谢,您的回答正是我所期待的。 绝妙的方法,非常有用 我们如何在 .net Core 中实现这一点? @PrashanFernando(或任何找到此答案的人)您可以在此处找到 .net Core 的详细信息:***.com/a/56127866/516138【参考方案2】:

是的,有可能...您可以使用IControllerConfiguration 来定义每个控制器的特定配置..

This 是描述此场景的示例。您可以快速了解如何在here(来自示例)上使用此接口。

【讨论】:

【参考方案3】:

这个 Stack Overflow answer 应该会有所帮助。它向您展示了如何创建一个 ActionFilter,它可以应用于您希望使用 CamelCasing 的任何操作。

【讨论】:

我之前看过,它是“Per Action”。我的问题是,是否有可能实现驼峰“每个控制器”。 您可以在控制器和操作级别使用此属性。虽然我建议添加行 - _camelCasingFormatter.Indent = true - 以使输出更具可读性。 这是最好的答案,imo【参考方案4】:

我知道这已经很老了,但我对接受的答案有疑问,因为格式化程序还有其他必要的更改在删除和重新添加后不再存在。我通过修改现有的格式化程序来做到这一点,如本要点所示:https://gist.github.com/mauricedb/5356933。

【讨论】:

以上是关于在每个控制器的 ASP.NET WebAPI 上强制使用 CamelCase的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp Net Core Web App(不是 WebAPI)中存储令牌

asp.net 如何变成 MVC 或 WebApi?

如何在 asp.net 核心 webapi 控制器中读取请求正文?

在 ASP.NET 中使用 WebAPI 或 MVC 返回 JSON

ASP.NET WebApi 从入门到"放弃"系列---WebApi 请求路由

ASP.Net MVC 4 Web API 控制器不适用于 Unity.WebApi