在每个控制器的 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 核心 webapi 控制器中读取请求正文?
在 ASP.NET 中使用 WebAPI 或 MVC 返回 JSON