在某些情况下,我有NewtonSoft JSON.NET,在我的控制器中,我只需从我的控制器返回Jobject,一切都是正常的。
但是我有一个案例,我从另一个服务获得一些原始的JSON,并且需要从我的webAPI返回它。在这种情况下,我不能使用NewtonSOft,但如果可以的话,我会从字符串创建一个JOBJECT (这似乎是不必要的处理开销),并返回它,这样就没有问题了。
但是,我想简单地返回它,但是如果我返回字符串,那么客户端将收到一个JSON包装器,其中包含我的上下文作为编码的字符串。
如何从我的WebAPI控制器方法显式地返回一个JSON?
发布于 2013-06-14 06:02:09
有几种选择。最简单的方法是让您的方法返回一个HttpResponseMessage
,并使用基于您的字符串的StringContent
创建该响应,类似于以下代码:
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字符串
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);
}
发布于 2018-06-11 15:58:21
以下是@carlosfigueira的解决方案,适用于使用WebApi2引入的IHttpActionResult接口:
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);
}
发布于 2020-11-10 15:37:02
这适用于我在.NET核心3.1中的工作。
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");
}
public Task<ContentResult> X()
{
var request = new HttpRequestMessage(HttpMethod.Post, url);
(...)
return ChannelCosmicRaysAsync(request);
}
ContentResult
是Microsoft.AspNetCore.Mvc.ContentResult
。
请注意,这不是频道标题,但在我的情况下,这是我需要的。
https://stackoverflow.com/questions/17097841
复制相似问题