首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Asp.net WEBAPI显式返回JSON字符串?

从Asp.net WEBAPI显式返回JSON字符串?
EN

Stack Overflow用户
提问于 2013-06-14 05:56:33
回答 7查看 94.1K关注 0票数 95

在某些情况下,我有NewtonSoft JSON.NET,在我的控制器中,我只需从我的控制器返回Jobject,一切都是正常的。

但是我有一个案例,我从另一个服务获得一些原始的JSON,并且需要从我的webAPI返回它。在这种情况下,我不能使用NewtonSOft,但如果可以的话,我会从字符串创建一个JOBJECT (这似乎是不必要的处理开销),并返回它,这样就没有问题了。

但是,我想简单地返回它,但是如果我返回字符串,那么客户端将收到一个JSON包装器,其中包含我的上下文作为编码的字符串。

如何从我的WebAPI控制器方法显式地返回一个JSON?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-06-14 06:02:09

有几种选择。最简单的方法是让您的方法返回一个HttpResponseMessage,并使用基于您的字符串的StringContent创建该响应,类似于以下代码:

代码语言:javascript
复制
public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return response;
}

并检查null或空JSON字符串

代码语言:javascript
复制
public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (!string.IsNullOrEmpty(yourJson))
    {
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
        return response;
    }
    throw new HttpResponseException(HttpStatusCode.NotFound);
}
票数 211
EN

Stack Overflow用户

发布于 2018-06-11 15:58:21

以下是@carlosfigueira的解决方案,适用于使用WebApi2引入的IHttpActionResult接口:

代码语言:javascript
复制
public IHttpActionResult Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (string.IsNullOrEmpty(yourJson)){
        return NotFound();
    }
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return ResponseMessage(response);
}
票数 19
EN

Stack Overflow用户

发布于 2020-11-10 15:37:02

这适用于我在.NET核心3.1中的工作。

代码语言:javascript
复制
private async Task<ContentResult> ChannelCosmicRaysAsync(HttpRequestMessage request)
{
    // client is HttpClient
    using var response = await client.SendAsync(request).ConfigureAwait(false); 

    var responseContentString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

    Response.StatusCode = (int)response.StatusCode;
    return Content(responseContentString, "application/json");
}
代码语言:javascript
复制
public Task<ContentResult> X()
{
    var request = new HttpRequestMessage(HttpMethod.Post, url);
    (...)

    return ChannelCosmicRaysAsync(request);
}

ContentResultMicrosoft.AspNetCore.Mvc.ContentResult

请注意,这不是频道标题,但在我的情况下,这是我需要的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17097841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档