根据请求中的某些值(标题或URL),我想更改DTO对象的序列化.
为什么?好吧,我已将[JsonProperty(“A”)]应用于我的DTO,但根据客户端(网站或移动应用程序),它是否要使用该属性.
我开始了
services
.AddMvc()
.AddJsonoptions(opt =>
{
#if DEBUG
    opt.SerializerSettings.ContractResolver = new NoJsonPropertyNameContractResolver();
#endif
}

因此,在调试时,我获得了具有完整属性名称的JSON.我使用JsonProperty属性来缩短响应JSON,这适用于移动应用程序(Xamarin),后者反序列化回到相同的DTO.
但现在我有一个网站使用相同的API通过jQuery获取数据,但在那里我想要处理DTO的完整属性名称,而不是JsonProperty属性中给出的名称.
网站和WebApi位于同一台服务器上,因此如果响应更大,则没有问题.

我开始使用中间件类来对客户标头值做出反应,这有效,但现在我不知道如何进入JSON SerializerSettings.搜索网络但找不到它.

在搜索时我读过有关InputFormatters和OutputFormatters,以及内容协商,但我不知道我必须去哪个方向.

我不想使用不同的设置两次部署相同的API.
如果这会有所帮助,我能够改变routesconfig之类的东西.

更新
不仅JSON响应必须以两种不同的方式序列化,而且反序列化必须以两种不同的方式完成.

解决方法

这有两个选择:

1.手动格式化

您通过services.AddMvc()设置的选项.AddJsonoptions()在DI中注册,您可以将其注入您的控制器和服务:

public HomeController(IOptions<MvcJsonoptions> optionsAccessor)
{
    JsonSerializerSettings jsonSettings = optionsAccessor.Value.SerializerSettings;
}

要按请求覆盖这些序列化设置,您可以使用Json方法或创建JsonResult实例:

public IActionResult Get()
{
    return Json(data,new JsonSerializerSettings());

    return new JsonResult(data,new JsonSerializerSettings());
}

2.结果过滤器替换JSON输出

public class ModifyResultFilter : IAsyncResultFilter
{
    public ModifyResultFilter(IOptions<MvcJsonoptions> optionsAccessor)
    {
        _globalSettings = optionsAccessor.Value.SerializerSettings;
    }

    public async Task OnResultExecutionAsync(
        ResultExecutingContext context,ResultExecutionDelegate next)
    {
        var originResult = context.Result as JsonResult;

        context.Result = new JsonResult(originResult.Value,customSettings);

        await next();
    }
}

在动作/控制器上使用它:

[ServiceFilter(typeof(ModifyResultFilter ))]
public IActionResult Index() {}

或者创建自定义属性,如documentation中所述:

[ModifyResultAttribute]
public IActionResult Index() {}

不要忘记在DI中注册过滤器.

c# – 每个请求的ASP.NET Core API JSON serializersettings的更多相关文章

  1. HTML5之消息通知的使用(Web Notification)

    通知可以说是web中比较常见且重要的功能,私信、在线提问、或者一些在线即时通讯工具我们总是希望第一时间知道对方有了新的反馈。本篇文章主要介绍了HTML5之消息通知的使用(Web Notification),感兴趣的小伙伴们可以参考一下

  2. ios – 我可以使用哪些iPhone OS API来实现类似于iBook页面翻转过渡的过渡动画?

    >UIKitAPI中的某个地方是否可以使用该动画,还是我必须自己实现?它肯定有3D感觉,他们可以使用OpenGLESAPI吗?解决方法Apple当然使用OpenGLES来实现它.Apple使用的实际API是私有的,但thisblogger具有示例代码的实现的开始.

  3. iOS 7,用于断开调用的私有API CTCallDisconnect不起作用

    谢谢!

  4. 我应该使用哪个高级API来管理iOS上的UDP套接字?

    在“NetworkProgrammingTopicsConceptualGuide”的“UsingSocketsandStreams”一章中,Apple说:Note:POSIXnetworkingdoesnotactivatethecellularradiooniOS.Forthisreason,thePOSIXnetworkingAPIisgenerallydiscouragediniOS.同样

  5. 保护MY REST API仅用于MY IOS APP

    我在Laravel中设计一个RESTAPI,用于我的ios应用程序.目前我被困在以下几点:如何保护我的RESTAPI只允许访问我的ios应用程序?听起来我需要通过向我的IOSAPP授予一个私钥来将类似于HMAC方法的内容合并到我的IOSAPP代码中.当从iosapp中运行请求时,我传递带有私钥和其他数据的哈希,然后当在服务器上收到请求时,我通过重新计算哈希来检测请求是否来自应用程序内的用户.我不知道这是否安全&我会认为不是吗?

  6. ios – 尝试向我们分配IP而不是localhost或home时,NSURLSession失败

    我有一台本地运行的服务器(我的IP是192.168.0.98),并且已经尝试使用一些网络代码来访问它.最初这是通过AFNetworking完成的,但我现在用这样的NSURLSession完成了它:然后我用这3个URL运行它:>http://localhost:8080/api–>作品.>http://127.0.0.1:8080/api–>作品.>http://192.168.0.98:8080/

  7. 适用于iOS的Google云端硬盘实时API

    我想使用GoogleDrive和新的实时API在我的iOS应用中实现实时协作.我知道我可以在Objective-C中设置一个Web视图,并在Web视图和我的本机应用程序之间建立双向通信,因此使用javascript库,但我担心这对于高容量来说效率低下数据流量.我希望可能会有一个原生的解决方案即将出现.有关Objective-C的GoogleApi客户端库是否会更新以包含Google云端硬盘实时API的任何消息?

  8. ios – 如何通过iPhone中的Graph API在Facebook上“喜欢”和“评论”?

    我正在使用图形api显示新闻源.我对以下问题有疑问.>我想为每个新闻提要帖子提供“赞”功能.>我想为每个新闻提要帖子提供“评论”功能.有人可以帮助我如何使用iPhone中的图形API来解决这个问题.解决方法请参考我的答案:HowtocommentorlikeaphotoinfacebookthroughFBconnectorGraphAPIiniPhoneSDK?只需将您的访问令牌发送到https

  9. ios – 使用带有OAuth 2.0的Google API在iPhone中登录Gmail

    我找到了Google提供的服务,可以访问各种Google服务的GoogleApi.我可以在iPhone中设置一个项目,并为iOS应用程序和本机应用程序创建API访问.我想为我的iPhone应用程序使用本机API.它API为我提供了电子邮件,全名,名字,姓氏,google_id,性别,dob,profile_image.如何在我的iPhone应用程序,任何示例应用程序,可用的代码段中使用这些?

  10. ios – 如何使用YouTube API V3?

    我想知道如何在iOS应用中使用新的YouTubeAPI(第3版),但我不知道如何做.我做了很多关于它的研究,但是我发现所有的例子和老API的代码,所以它们是无效的.现在,我明白了,使用新的API你必须在Google开发者控制台中创建一个项目…使用API2很简单它…

随机推荐

  1. 如何在.NET Core类库中使用System.Windows.Forms

    我的project.json文件:我所有的net40特定代码都在NET40下定义.有什么想法吗?

  2. 发布到IIS.省略在服务器上安装.NET Core Windows Server Hosting软件包

    ASP.NETCore文档说,其中一个先决条件是目标服务器上的install.NETCoreWindowsServerHostingbundle.是否有可能以某种方式将此依赖项包含在由dotnet-publish创建的自包含包中,并避免现场安装?不.该软件包包含Asp.Net核心模块–以及使用IIS运行Asp.NETCore应用程序所需的本机IIS模块.如果未安装Asp.NET核心模块并且您通过安

  3. CentOS下安装.net core环境并部署WebAPI

    如果提示如下内容就说明启动成功了。

  4. 在CentOS上使用VS Code调试.Net Core应用程序

    VSCode运行后会看到如下图所示的效果。在VSCode界面中,单击最左边的图标按钮中的最后一个图标来安装扩展。主要的扩展包括C#、CodeRunner、C#Extensions和C#FixFormat。如果直接使用Yum安装,安装的是1.8版本的,不符合VSCode所需的版本要求2.1以上的要求,这个只能编译安装了,具体安装步骤可参考《HowtoInstallGit2.15onCentOS/RHEL7/6,Fedora27/26/25》这篇文章。一切准备就绪,现在可将应用程序项目通过SFTP上传到服务器

  5. CentOS 7下发布.net core 2.0 过程

    第5步:在vs中发布工程到本地磁盘发布后的结果如下第6步:验证工程是否可以运行在CMD中切换到发布的目录,执行命令:dotnetASPCore2.dll如果出现如下图所示表明发布成功,可以测试一下localhost:50003.发布到CentOS,并启动服务第1步:用WinSCP拷贝至CentOS系统中的/var/www/qa/中第2步:在CentOS中测试是否可以运行:在Xshell中执行:/opt/core2.0.3/dotnet/var/www/qa/ASPCore2.dll结果没有问题,在Cent

  6. 部署.net core到CentOS系统

    locationNum=10&fps=1

  7. CentOS下使用.Net Core 1.1部署WebApi

    一、安装CentOS系统二、在CentOS上安装最新的.NetCore安装教程在官网已经很详细了。

  8. Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署1

    经过上面四篇博文中的相关安装和配置,我们主要完成了两个容器的创建和运行:gitlab和gitlab-runner:本篇博文目的:使用GitLabCI脚本编译ASP.NETCore2.0程序,然后将编译后的文件传输到服务器上,最后使用SSH连接服务器,并运行程序,完成发布和部署。简单来说,就是我们每次使用gitpush提交完代码,自动完成发布和部署。

  9. 在CentOS上部署Asp.net Core应用程序

    在此之前,我将同样的程序已经成功发布到了Ubuntu,我觉得,既然已经有了前一次的成功经验,不论CentOS还是Ubuntu都是Linux,道理应该差不多吧。但事实证明,还是有些差异的,某些在CentOS上频出的问题在Ubuntu上却没有,所以我的感觉是Ubuntu部署Asp.netCore程序更容易些。Asp.netCore应用需要反向代理配合才能运行,IIS、Apache和Nginx等Web服务软件都可以作为它的反向代理。在Ubuntu下部署与这个差不多,某些命令不一样。

  10. dotnet core 在ubuntu 上运行 F#

    dotnetcore在ubuntu上运行F#线装dotnetcoreubuntusudoapt-getupdatesudoapt-getinstallmono-completefsharpsudoyumupdatesudoyuminstallmono-completefsharp

返回
顶部