从.net核心API返回纯文本/非JSON数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从.net核心API返回纯文本/非JSON数据相关的知识,希望对你有一定的参考价值。

注意:TL; DR在底部:)

在我目前的工作场所中,通常有90%的情况下我们的API返回JSON对象,但是某些更简单的端点当前返回简单的纯文本,示例端点是:

  • GET ../entity/lastChange(返回特定实体类型的最后更新的dateTime)-返回"2019-08-02 11:26:32.341817-07:00"
  • GET ../css?platform=android(根据平台返回用于动态样式的CSS内容)-返回".my-class { color: red; }"

我已经阅读了REST指南(https://www.w3.org/Protocols/rfc2616/rfc2616.html),但实际上找不到任何与此有关的信息。我也阅读了关于同一主题的几篇文章,但这些文章似乎集中在我们是否可以,而不是我们是否应该。

[我在想的是,通常可以很方便地直接以字符串/纯文本形式获取结果,但是,这通常会导致在脆弱的体系结构或某些客户端(例如Angular HttpClient期望有效的JSON)周围出现问题。从所有端点返回的对象)。我正在考虑添加一个通用的SimplApiResult<T> { public T Result { get; set; } }类,该类可以在多个API中重复使用以包装基本响应类型。

TL; DR:简单的RESTful端点是否应在适当的地方或简单的JSON结构返回纯文本,例如:

  • 纯文本"2019-08-02 11:26:32.341817-07:00"
  • 简单json { "result": "2019-08-02 11:26:32.341817-07:00" }

谢谢!

答案

您的响应标头应具有:

"Content-Type: application/json"

"Content-Type: text/html; charset=UTF-8"

这告诉客户它应该是什么类型。

Angular HttpClient()将采用纯文本(string),并且您必须解析JSON(JSON.parse()),但是HttpClient<T>()需要JSON,以便可以映射到Type / Interface / Class。我相信这两种方法都检查标题中的Content-Type,如果使用错误的响应类型,则会给出错误。

另一答案

据我所知,REST范式的核心是通过使用Verbs对它们进行操作来表示Ressources(在URI中)及其状态或状态转换(GET,POST,DELETE) ,...)。根据其想法,REST对这种资源的类型无关紧要。当前的Web API通常使用JSON(例如.NET Core中的默认序列化程序用于JSON,可以更改),但这只是约定。如果它是具有状态的资源,则使用任何内容类型(JSON,纯文本,XML,jpg,二进制等)都是完全RESTful的。

以上是关于从.net核心API返回纯文本/非JSON数据的主要内容,如果未能解决你的问题,请参考以下文章

AJAX中的dataType

如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?

在 Python 3.6 中解码来自 API 的文本响应

从外部 URL 获取 JSON 数据并将其以纯文本形式显示在 div 中

如何反序列化 .net 核心中的 json 数据集

处理JSON数据