相关疑难解决方法(0)

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

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

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

这可能吗?

asp.net asp.net-web-api

31
推荐指数
2
解决办法
7840
查看次数

Web API:在操作或控制器级别配置JSON序列化程序设置

许多SO线程都涵盖了在应用程序级别覆盖Web API的默认JSON序列化程序设置.但是如何在动作级别配置其设置?例如,我可能想要在我的一个操作中使用camelcase属性进行序列化,但不能在其他操作中进行序列化.

c# json.net asp.net-web-api

29
推荐指数
2
解决办法
1万
查看次数

使用 ASP.NET Core 2.1 在控制器上配置输入/输出格式化程序

我正在将旧的 ASP.NET WebAPI 2.1 项目重写为 ASP.NET Core MVC 2.1。我面临的问题之一是移植服务的旧行为,该服务通过实现 IControllerConfiguration 接口的自定义属性来配置输入和输出格式化程序。除了使用 AddMvc(options) 方法在全局级别注入它们之外,我无法找到此接口的替代品,也找不到在控制器上配置格式化程序的任何替代方法。

c# asp.net-core

5
推荐指数
2
解决办法
4967
查看次数

有没有办法在每个 HTTP 请求的 JSON 响应中重置 $id?JsonSerializerSettings = PreserveReferencesHandling.Objects

XYZController.cs

[HttpPost]
public async Task<ActionResult> Post([FromBody] T inputContext)
{
       var outputContext = Process(inputContext);
       return StatusCode(200, outputContext );
}
Run Code Online (Sandbox Code Playgroud)

启动文件

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc().AddJsonOptions(options =>
            {
                UpdateJsonSettings.ConfigureJsonFormatter(options.SerializerSettings);
            });
}
Run Code Online (Sandbox Code Playgroud)

更新JsonSettings.cs

internal static void ConfigureJsonFormatter(JsonSerializerSettings settings)
{
       settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
       settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
       settings.Converters.Add(new StringEnumConverter());
}
Run Code Online (Sandbox Code Playgroud)

XYZ 控制器的 HttpResponse 尝试 1:

{ "$id": "1", "bill": { "$id": "2", "type": "TYPE1",

XYZ 控制器的 HttpResponse 尝试 2: -- 不以 $id 1 开头

{ "$id": "28", <--- 不知道为什么第二个请求 $ID 以 28 开头 …

asp.net-core-webapi asp.net-core-2.1

5
推荐指数
1
解决办法
221
查看次数

控制器级别的 ASP.NET Core 3.1 中 JsonOutputFormatter 的替代方案

我有一个自定义过滤器属性,改编自当前为 .NET Core 2.2 实现的这个答案,我想适应 3.1。它引用了 Newtonsoft.JSON,出于兼容性原因,我更愿意保持这种方式。

代码如下:

public class AllPropertiesAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext ctx)
    {
        if (!(ctx.Result is ObjectResult objectResult)) return;

        var serializer = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include };
        serializer.Converters.Add(new StringEnumConverter());

        var formatter = new JsonOutputFormatter(serializer, 
                        ctx.HttpContext.RequestServices.GetRequiredService<ArrayPool<char>>());

        objectResult.Formatters.Add(formatter);
    }
}
Run Code Online (Sandbox Code Playgroud)

JsonOutputFormatter根据官方文档,仅支持 .net core 2.2 ;我应该如何继续在 3.1 下保持相同的行为?

c# asp.net-core asp.net-core-3.1

3
推荐指数
1
解决办法
3744
查看次数