zoukankan      html  css  js  c++  java
  • Asp.Net Core Mvc上的首字母大小写的问题

    • 本次在使用的使用采用前后端开发,因此在前段已完成UI设计以及按照RAP来完成数据的模拟获取的情况下,后台返回字段出现了json数据的默认格式化。

    • 这就很头疼了,再让前端再去改明显会浪费很多的时间,因此决定解决这个问题。

    • 首先上网搜索信息,在网上只查到了asp.net webapi的解决方案,但是也为我大概指明了方向。

    这是解决方案的代码:

    public static class WebApiConfig {

        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
            // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
            // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。
            //config.EnableQuerySupport();
    
            // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
            // 有关详细信息,请参阅: http://www.asp.net/web-api
            config.EnableSystemDiagnosticsTracing();
    
    
    
            // 干掉XML序列化器
            config.Formatters.Remove(config.Formatters.XmlFormatter);
    
            // 解决json序列化时的循环引用问题
            config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            // 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式.
            //config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new  CamelCasePropertyNamesContractResolver();
            // 对 JSON 数据使用混合大小写。跟属性名同样的大小.输出
            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
        }
    
    }
    
    • 我们需要做的就是将mvc的序列化装换器设置成DefaultContractResolver;

    那接下来就把从Core中来实现这个问题:

    • 首先从mvc来判断应该在AddMvc方法中进行数据操作,那接下来接续为其按上述步骤设置
    1. 首先添加一个新的JsonJsonSerializerSettings,将ContractResolver 设置成DefaultContractResolver ,并将生成一个的JsonOutputFormatter格式器来存放

    2. 为了防止其他的格式器影响结构将所有的格式器,只剩下该格式器来序列化json数据。

    3. 并将新生成的JsonOutputFormatter插入到第一个。

    services.AddMvc(options => { var JsonSerializerSettings = new JsonSerializerSettings(); JsonSerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; JsonSerializerSettings.ContractResolver = new DefaultContractResolver(); var jsonOutputFormatter = new JsonOutputFormatter(JsonSerializerSettings, ArrayPool<char>.Shared); options.OutputFormatters.RemoveType<JsonOutputFormatter>(); options.OutputFormatters.RemoveType<TextOutputFormatter>(); options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>(); options.OutputFormatters.Insert(0, jsonOutputFormatter); });

    • 结果返回json数据仍存在问题,这就郁闷了,经过多次测试依旧出现问题。

    那就试试另一种方式:

    • 在模型类中为模型参数指明JsonProperty参数名试试,看数据是否仍旧会被格式化掉。

    [JsonProperty("EntrustId")] public uint EntrustId { get; set; }

    • 结果在单一数据指明JsonProperty之后返回字段终于解决了。但是这样的方式只能是一种替代方案,在本质上仍然未解决问题,于是我决定继续解决这个问题。

    按照第一次的思路来说问题应该没有问题,但是为什么不能解决问题呢。继续bing查资料吧。。。 终于找到了明灯:https://q.cnblogs.com/q/85812 额,感觉没天理了。。。

    • 问题出在Asp.Net Core 和 Asp.Net一样已经为我们集成好了这些配置。

    • 我们只需要在services.AddMvc().AddJsonOptions()中设置ContractResolver 即可。代码非常简单:

    services.AddMvc().AddJsonOptions(options=>{ options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });

    *这个问题花了很久时间解决,但是感觉很值,特别是看到最后的问题的时候感觉自己豁然开朗的感觉。问题很简单,但是每一步都花费了自己很多心思。

  • 相关阅读:
    Url参数的安全性处理
    redis安装学习
    Spring的IOC原理(转载)
    Linux下jdk&tomcat的安装
    App架构经验总结(转载)
    谈谈对Spring IOC的理解(转载)
    2018,扬帆起航!
    Lua随机问题
    为什么R#警告Warning Delegate subtraction has unpredictable result
    Dotween实现打字机效果,并向下滚屏
  • 原文地址:https://www.cnblogs.com/zhong-ken/p/6062782.html
Copyright © 2011-2022 走看看