前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >abp部分接口转换为首字母大写返回

abp部分接口转换为首字母大写返回

作者头像
用户6362579
发布2019-12-30 17:37:38
1.2K0
发布2019-12-30 17:37:38
举报
文章被收录于专栏:小神仙小神仙

在对接手机端app接口时,由于手机端需要返回的模型使用首字母大写的形式,abp(asp.net core)接口默认返回的数据是驼峰命名法,就是首字母小写,我们自己的pc网页端又是使用的驼峰法,所以不能直接改mvc的配置,这样pc端所有的接口都要改。有同学是用的给字段指定json序列化名称:

代码语言:javascript
复制
  [JsonProperty("Id")] public Guid Id { get; set; }

这样写不知道他累不累


解决

过程很曲折,不提也罢,直接说方案: 我们想要的效果是指定的接口(类型)使用指定的方式返回json格式。微软爸爸给我们提供了IOutputFormatter接口用来格式化返回结果,我们就用这个接口来实现

创建自定义的格式化器

代码语言:javascript
复制
    public class JsonFormatter : JsonOutputFormatter
    {
        public const string FormatterName = "PacalJson";

        public JsonFormatter(JsonSerializerSettings serializerSettings, ArrayPool<char> charPool) : base(serializerSettings, charPool)
        {
            serializerSettings.ContractResolver = new DefaultContractResolver();
        }
        protected override bool CanWriteType(Type type)
        {
            //我的接口有两种返回包装类型XXX和XXX2,所以我直接根据返回类型判断了,拿到了类型,还可以通过特性判断,根据需要自己调整,如果你调试发现type是Abp.Web.Models.AjaxResponse类型,这是因为abp提前进行序列化了,在controller上添加特性[Abp.Web.Models.DontWrapResult],不使用abp默认的序列化
            if (type != null && type.IsGenericType
                && (typeof(XXX<>).IsAssignableFrom(type.GetGenericTypeDefinition())
                   || typeof(XXX2<>).IsAssignableFrom(type.GetGenericTypeDefinition())))
            {
                return true;
            }
            return false;
        }
    }

修改Startup文件的ConfigureServices方法中的AddMvc代码

代码语言:javascript
复制
services.AddMvc(
                options =>
                {
                    options.Filters.Add(new CorsAuthorizationFilterFactory(_defaultCorsPolicyName));
                    var JsonSerializerSettings = new Newtonsoft.Json.JsonSerializerSettings
                    {
                        ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
                        ContractResolver = new DefaultContractResolver()
                    };
                    var jsonOutputFormatter = new JsonFormatter(JsonSerializerSettings, ArrayPool<char>.Shared);
                    options.OutputFormatters.Insert(0, jsonOutputFormatter);
                }
            );

在controller上添加特性,不使用abp默认的序列化

代码语言:javascript
复制
 [Abp.Web.Models.DontWrapResult]
public class XXXController
{

}

参考资料

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决
    • 创建自定义的格式化器
      • 修改Startup文件的ConfigureServices方法中的AddMvc代码
        • 在controller上添加特性,不使用abp默认的序列化
        相关产品与服务
        文件存储
        文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档