带有 JSON 字符串的 IHttpActionResult

2023-12-28

我有一个方法最初返回一个HttpResponseMessage我想将其转换为返回IHttpActionResult.

我的问题是当前的代码正在使用 JSON.Net 来序列化复杂的通用树结构,它可以很好地使用自定义JsonConverter我写的(代码运行良好)。

这是它返回的内容:

    string json = NodeToJson(personNode);

    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(json, Encoding.UTF8, "application/json");

    return response;

NodeToJson 方法是自定义转换器发挥作用的地方......

private static string NodeToJson(Node<Person> personNode) {

    var settings = new JsonSerializerSettings {
        Converters = new List<JsonConverter> { new OrgChartConverter() },
        Formatting = Formatting.Indented
    };

    return JsonConvert.SerializeObject(personNode, settings);

}

请注意,这会返回一个string,格式为 JSON。

如果我把它切换到IHttpActionResult,无论我尝试什么,它似乎都会失败。我可以离开它(它有效),但我应该为此使用最佳实践并且IHttpActionResult似乎是我应该使用的。

我已经尝试过return Json(json);但这会导致无效的、无法解析的 JSON,大概是因为它试图进行双重转换?

return Ok(json);结果 JSON 字符串被包装在 XML 中。

这样做的正确方法是什么?

EDIT:

除了这个特定方法之外,我现在已成功将该项目中的每个方法转换为使用 IHttpActionResult 。

它是通用树到 JSON 的序列化。无论我尝试什么方法,我都会返回无效的 JSON。这HttpResponseMsessage方法工作正常,但我无法获取有效的 JSONIHttpActionResult.


您可以创建自己的 IHttpActionResult 类实例来返回 JSON 以及控制器或基本控制器类中的方法来使用它。

创建设置内容和状态代码的 IHttpActionResult 实例:

public class JsonTextActionResult : IHttpActionResult
{
    public HttpRequestMessage Request { get; }

    public string JsonText { get; }

    public JsonTextActionResult(HttpRequestMessage request, string jsonText)
    {
        Request = request;
        JsonText = jsonText;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        return Task.FromResult(Execute());
    }

    public HttpResponseMessage Execute()
    {
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(JsonText, Encoding.UTF8, "application/json");

        return response;
    }
}

向控制器添加一个方法来创建结果。这是一个 Web API 示例:

public class MyApiController : ApiController
{
    protected internal virtual JsonTextActionResult JsonText(string jsonText)
    {
        return new JsonTextActionResult(Request, jsonText);
    }

    [HttpGet]
    public IHttpActionResult GetJson()
    {
        string json = GetSomeJsonText();
        return JsonText(json);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 JSON 字符串的 IHttpActionResult 的相关文章

随机推荐

  • 如何在数据源位置中使用sitecore查询? (动态数据源)

    是否可以将数据源位置 而不是数据源 设置为 sitecore 查询 我想要做的是将子布局的数据源位置设置为包含它的项目 当前项目 下的文件夹 子布局数据源位置应指向当前项目下的文件夹 所以我尝试将数据源位置设置为query Items 但这
  • 在讨论编程语言时,“强大”意味着什么?

    在编程语言讨论 比较的背景下 术语 能力 是什么意思 它有明确的含义吗 即使是一个定义不明确的含义 假设有人说 X 语言比 Y 语言更强大 或提出相同的问题 他们的意思是什么 或者他们想找出什么信息 它没有明确定义的含义 在这些类型的讨论中
  • Android 锁屏 C# .NET 副本

    我希望在 Visual Studio C 中创建一个模仿 Android 模式锁定屏幕的应用程序 并且想知道是否有人有任何这样做的提示 这不是一个商业项目 不会赚钱 只是一点乐趣 我一直在玩 WPF 项目 现在不知所措 我想到的唯一方法是在
  • Spark 中的 Dataframe 连接可以保留顺序吗?

    我目前正在尝试将两个数据帧连接在一起 但在其中一个数据帧中保留相同的顺序 From 哪些操作保留 RDD 顺序 https stackoverflow com questions 29284095 which operations pres
  • React Native + Firebase 存储:base64 和 blob 不起作用

    我试图将我的图像文件编码为 base64 或 blob 但它们都不起作用 我也在用这个 https github com react community react native image picker https github com
  • 如何在 Pnotify 中将焦点设置在按钮上

    我在我的项目中使用 pnotify Alert jquery 我试图在弹出对话框时将焦点设置在 确定 按钮上 这样用户只需按 Enter 或空格键即可关闭对话框 但无法做到这一点 这是 pnotify 的链接 http sciactive
  • Ruby“.downcase!”和“downcase”混淆

    我刚刚开始 Ruby 编程 我读过小写和小写的区别 在红宝石中 https stackoverflow com questions 709229 difference between downcase and downcase in rub
  • 使用 dplyr mutate 将向量分成两列

    假设我有以下功能 get answer lt function condition dp rp if condition DD result lt rbinom n 2 size 1 prob dp if condition in c DR
  • 在 Android 中捕获完整的日志

    我想知道如何从 Android 设备获取完整日志 从我的应用程序初始化到任何崩溃或直到强制关闭我的应用程序 我在这里发帖的原因是我的应用程序在某个时候崩溃了 但是当我使用日志时DDMS Logcat我的崩溃详细信息已被新日志覆盖 我如何获取
  • 从堆栈内存中删除结构

    我有一个链表结构 我想将一个节点 另一个结构 指针传递给一个函数 该节点是链表的一部分 但我将节点单独传递给删除器函数 我希望它将下一个节点数据复制到自身中 覆盖其数据 并删除下一个节点 从而删除自身 这部分正在工作 我让它检查传递的节点是
  • @Html.BeginForm 在页面上显示“System.Web.Mvc.Html.MvcForm”

    我有一个剃刀视图 我在 if 语句内部添加了一个删除按钮 当视图在浏览器中呈现时 它会显示 系统 Web Mvc Html MvcForm 删除按钮旁边 我该如何摆脱它 这是代码 div if update User UserName Eq
  • processing.js 如何检测浏览器的大小?

    如前所述 processing js 如何响应浏览器的大小 响应式设计 我尝试过 screen width 和 screen height 但效果不佳 看来只能检测电脑屏幕尺寸的大小 更重要的是 我想在拖动并更改浏览器大小时与窗口大小保持同
  • C++数学表达式的错误结果[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我必须计算
  • 具有 MultiIndex 的 DataFrame 到 dict

    我有一个带有多重索引的数据框 我想知道我是否以正确的方式创建了数据框 见下文 01 01 02 01 03 01 04 01 bar total1 40 52 18 11 total2 36 85 5 92 baz total1 23 39
  • 如何在java中读取.pem文件格式的EC私钥

    如何使用JAVA读取 pem文件中的EC私钥 在阅读时我遇到以下异常 引起原因 java security InvalidKeyException IOException 版本不匹配 支持 00 解析 01 其实我的 Pem 文件包含以下结
  • 在 SQL 中使用 COUNT 函数

    首先也是最重要的 这是作业的一部分 我正在尝试使用 COUNT 函数作为与 Northwind 数据库相关的查询的一部分 查询应返回 CustomerID CompanyName 和为每个客户下的订单数量 当然 前两部分很简单 但我无法让
  • C++ 外部函数,以函数指针作为参数,在具有成员函数的类内部使用

    对 C 相当陌生 假设我有一堂课 class A private double m x m y public A double x double y m x x m y extF m x y intF double intF double
  • Json 文件到 pyspark 数据帧

    我正在尝试在 Spark pyspark 环境中使用 JSON 文件 问题 无法将 Pyspark Dataframe 中的 JSON 转换为预期格式 第一个输入数据集 https health data ny gov api views
  • 在 SELECT 中使用构造函数表达式的 JPQL/Hibernate 限制

    根据我对 JPA 2 0 规范的阅读 以下内容应该是有效的 select e employeeId new com foo Custom e employeeName e employeeCity from Employee e 然而 Hi
  • 带有 JSON 字符串的 IHttpActionResult

    我有一个方法最初返回一个HttpResponseMessage我想将其转换为返回IHttpActionResult 我的问题是当前的代码正在使用 JSON Net 来序列化复杂的通用树结构 它可以很好地使用自定义JsonConverter我