C# 为 Azure Function v3 全局设置大小写约定

2024-03-23

我是 Azure Functions 的新手,正在尝试将 .NET Core API 转换为 Azure Functions。我面临的问题是如何全局设置响应命名约定(JSON)。默认情况下,它是CamelCase但我想用PascalCase,我在互联网上找到的所有解决方案都是修改每个函数/端点中的响应。我想在全球范围内进行设置

我已经添加了Startup.cs配置 DI。以下是我尝试配置响应 JSON 命名约定的尝试:

public override void Configure(IFunctionsHostBuilder builder)
{
    builder.Services.AddMvcCore().AddJsonOptions(m =>
    {
        m.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

    builder.Services.Configure<JsonSerializerSettings>(m =>
    {
        m.ContractResolver = new DefaultContractResolver();
    });

    builder.Services.Configure<JsonSerializerOptions>(m =>
    {
        m.DictionaryKeyPolicy = null;
        m.PropertyNamingPolicy = null;
    });

    builder.Services.Configure<JsonOptions>(m =>
    {
        m.JsonSerializerOptions.DictionaryKeyPolicy = null;
        m.JsonSerializerOptions.PropertyNamingPolicy = null;
    });

    .....
}

函数示例(两者返回相同的响应,即驼峰命名法):

[FunctionName(nameof(Get))]
public async Task<IEnumerable<AppComponentViewModel>> Get([HttpTrigger(AuthorizationLevel.Function, "get", Route = "AppComponent/Get")] HttpRequest request)
{
    var appComponents = await _appComponentRepository.GetAll();
    return ToList(appComponents);
}

[FunctionName(nameof(Get))]
public async Task<ActionResult<IEnumerable<AppComponentViewModel>>> Get([HttpTrigger(AuthorizationLevel.Function, "get", Route = "AppComponent/Get")] HttpRequest request)
{
    var appComponents = await _appComponentRepository.GetAll();
    return Ok(ToList(appComponents));
}

默认情况下,Azure 函数主机使用“Newtonsoft.Json”,而不是 .net core 3+ 中引入的“System.Text,Json”。您可以使用下面的代码Startup.cs覆盖 MVC Json 序列化行为,这将保留您的属性名称大小写与实体类中的大小写相同。在下面的代码中它不会转换为camelCase不再,但同时也不会显式转换为PascalCase。它与 C# 对象相同。

注意:添加nugetMicrosoft.AspNetCore.Mvc.NewtonsoftJson版本 3.1.*(至少在 Function 开始支持 .net 5 之前不是最新的 5)。

        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddMvc()
                .AddNewtonsoftJson(o =>
                {
                    o.SerializerSettings.ContractResolver = new DefaultContractResolver();
                });
        }

如果您想专门强制所有内容都采用 Pascal 大小写,而不管 C# 对象中的大小写是什么,那么您可以创建您的NamingStrategy类具有该逻辑并分配它。

    public class MyNamingStrategy : NamingStrategy
    {
        protected override string ResolvePropertyName(string s)
        {
            // add logic to force name to desired casing
        }
    }    
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddMvc()
                .AddNewtonsoftJson(o =>
                {
                    o.SerializerSettings.ContractResolver = new DefaultContractResolver
                    {
                        NamingStrategy = new MyNamingStrategy()
                    };
                });
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 为 Azure Function v3 全局设置大小写约定 的相关文章

随机推荐

  • KAFKA 重启问题:在不删除 /tmp/kafka-logs 的情况下无法重启 kafka

    每当我尝试重新启动 kafka 时 都会出现以下错误 一旦我删除 tmp kafka logs 它就会得到解决 但它也会删除我的主题 有办法解决吗 ERROR Error while deleting the clean shutdown
  • Vim 自动生成 ctag

    现在我有以下内容 vimrc au BufWritePost c cpp h ctags R 这有几个问题 它很慢 为自上次标记生成以来未更改的文件重新生成标记 我必须按下输入按钮again写入文件后 因为不可避免的 按 Enter 或键入
  • Java 8 流:java.lang.IllegalStateException:结束大小 84758 小于固定大小 84764

    我在用Java 8 streams用于将映射值转换为数组的 API 我收到以下异常 Unhandled exception ScheduledExecutorService java lang IllegalStateException E
  • 检查 NSDate 是本周还是下周

    有没有办法检查 NSDate 是本周还是下周 我知道今天是 NSDate date 然后我该怎么办 使用 NSDateComponents 如下所示 NSCalendar gregorian NSCalendar alloc initWit
  • 将 .Net Core Web-API 迁移到 AWS Web Api 网关

    我有一个使用 Net Core 开发的 Web API 它有几个端点 GET POST 要求是将其移至 AWS API Gateway 该 Web API 是使用分层架构构建的 它有一个与 Db 层通信的业务层 该层拥有一些实体框架存储库
  • 如何使用 jax-rs 进行分段/表单文件上传?

    特别是 RESTeasy 如果 对于单个文件 有一个像这样的方法签名那就太好了 public void upload FormParam name FormParam file file InputStream 可行吗 还是我在做梦 似乎没
  • 将数据帧转换为向量(按行)

    我有一个包含像这样的数字条目的数据框 test lt data frame x c 26 21 20 y c 34 29 28 我怎样才能得到下面的向量 gt 26 34 21 29 20 28 我能够使用以下方法获得它 但我想应该有一种更
  • 微服务中的服务器到服务器通信

    我正在研究微服务架构 但我在这方面面临一些挑战 首先让我向您简要介绍一下架构 用户登录并获取签名令牌 该令牌将用于调用所有 REST API 将会有很多 API 服务器 其中 API 使用 Spring 安全性进行保护 并根据用户角色进行授
  • 奇数或偶数反斜杠和转义字符

    我对下面的代码有一点问题 import re pattern re compile r for text in r ok py r ok py r ok py r ok py r ok py search re search pattern
  • ReactJs“不变违规...”经典反应问题

    这是一个典型的反应问题 但我有点不知道如何处理它 我只想动态渲染我的表格线 但我收到错误 未捕获错误 不变违规 processUpdates 无法找到元素的子元素 2 这可能意味着 DOM 意外变异 例如 通过浏览器 通常是由于在使用表 嵌
  • 如何以简单的方式将 CGPoint 对象添加到 NSArray 中?

    我有大约 50 个 CGPoint 对象 它们描述了类似 路径 的东西 我想将它们添加到 NSArray 中 这将是一个只返回给定索引对应的 CGPoint 的方法 我不想创建 50 个变量 例如 p1 p2 依此类推 有没有一种简单的方法
  • 在 Windows Phone 8 中存储配置值/设置的最佳方法

    由于 WP8 应用程序中没有默认配置文件 因此存储配置值的最佳方式是什么 例如WCF 服务 URL 用户名和密码 我希望当手机重新启动且应用程序关闭时这些值可用且可更新 提前致谢 你应该使用IsolatedStorageSettings A
  • 如何在 Swift 中的自定义类中初始化 Timer? [复制]

    这个问题在这里已经有答案了 我制作了一个简单的计时器应用程序 但是 现在我想让它变得更好 并且我想为计时器控件编写一个类 class Cronometer private var counter Int 0 private var time
  • https://graph.microsoft.com/v1.0/places/microsoft.graph.room Api 未提供更新的数据

    我正在使用 Microsoft Graph 获取可供租户使用的房间列表 根据文档 列出 Palace Api 应该用于此目的 现在 我在使用 List Places api 获取更新数据时遇到问题 我已向租户添加了一些房间 但这些房间并未反
  • 使用 LINQ 时谓词的顺序重要吗?

    我知道以不同的顺序执行操作会产生不同的性能 例如以下慢速查询之间的差异 List
  • 无法在电子js中加载反应

    这是我的 package js 文件 name cabed version 0 1 0 private false dependencies testing library jest dom 5 16 5 testing library r
  • 经典 ASP 错误行 0 列 -1

    我们运行一个基于经典 ASP 构建的繁忙网站 出于各种遗留原因 在繁忙期间 我们会看到无法解释的错误 但无法追根究底 它通过 IIS 7 触发我们的自定义 500 错误页面来体现 在此页面上 我们使用 ASPError 对象和 err 对象
  • 如何用点更改 ggplot2 箱线图颜色

    解决了抖动问题 https stackoverflow com questions 52506296 ggplot geom point position jitterdodge not working when color specifi
  • 如何在宽度可变的 div 中居中/对齐 Google 地图

    我在 div 中加载了 Google 地图 其宽度为页面的 100 通过 API 叠加层位于中心 地图应如下所示放置 问题是地图现在左对齐 我可以使用与页面宽度相对应的 LatLng 移动中心 但这对于一个简单的任务来说似乎需要大量工作 我
  • C# 为 Azure Function v3 全局设置大小写约定

    我是 Azure Functions 的新手 正在尝试将 NET Core API 转换为 Azure Functions 我面临的问题是如何全局设置响应命名约定 JSON 默认情况下 它是CamelCase但我想用PascalCase 我