gpt4 book ai didi

c# - 带有 JSON 字符串的 IHttpActionResult

转载 作者:太空狗 更新时间:2023-10-29 23:59:45 25 4
gpt4 key购买 nike

我有一个最初返回 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);

}

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

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

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

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

正确的做法是什么?

编辑:

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

这是将通用树序列化为 JSON。无论我尝试哪种方法,我都会返回无效的 JSON。 HttpResponseMsessage 方法工作正常,但我无法使用 IHttpActionResult 返回有效的 JSON。

最佳答案

您可以创建自己的 IHttpActionResult 类实例以返回 JSON 和 Controller 或基 Controller 类中的方法以使用它。

创 build 置内容和状态码的 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;
}
}

向您的 Controller 添加一个方法来创建结果。这是一个 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);
}
}

关于c# - 带有 JSON 字符串的 IHttpActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com