Return a JSON string explicitly from Asp.net WEBAPI?

前端 未结 6 1216
栀梦
栀梦 2020-11-27 03:30

In Some cases I have NewtonSoft JSON.NET and in my controller I just return the Jobject from my controller and all is good.

But I have a case where I get some raw JS

相关标签:
6条回答
  • 2020-11-27 03:43

    If you specifically want to return that JSON only, without using WebAPI features (like allowing XML), you can always write directly to the output. Assuming you're hosting this with ASP.NET, you have access to the Response object, so you can write it out that way as a string, then you don't need to actually return anything from your method - you've already written the response text to the output stream.

    0 讨论(0)
  • 2020-11-27 03:49

    Here is @carlosfigueira's solution adapted to use the IHttpActionResult Interface that was introduced with WebApi2:

    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);
    }
    
    0 讨论(0)
  • 2020-11-27 03:53

    This works for me in .NET Core 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 is Microsoft.AspNetCore.Mvc.ContentResult.

    Please note this doesn't channel headers, but in my case this is what I need.

    0 讨论(0)
  • 2020-11-27 03:59

    these also work:

    [HttpGet]
    [Route("RequestXXX")]
    public ActionResult RequestXXX()
    {
        string error = "";
        try{
            _session.RequestXXX();
        }
        catch(Exception e)
        {
            error = e.Message;
        }
        return new JsonResult(new { error=error, explanation="An error happened"});
    }
    
    [HttpGet]
    [Route("RequestXXX")]
    public ActionResult RequestXXX()
    {
        string error = "";
        try{
            _session.RequestXXX();
        }
        catch(Exception e)
        {
            error = e.Message;
        }
        return new JsonResult(error);
    }
    
    0 讨论(0)
  • 2020-11-27 04:02

    sample example to return json data from web api GET method

    [HttpGet]
    public IActionResult Get()
    {
                return Content("{\"firstName\": \"John\",  \"lastName\": \"Doe\", \"lastUpdateTimeStamp\": \"2018-07-30T18:25:43.511Z\",  \"nextUpdateTimeStamp\": \"2018-08-30T18:25:43.511Z\");
    }
    
    0 讨论(0)
  • 2020-11-27 04:08

    There are a few alternatives. The simplest one is to have your method return a HttpResponseMessage, and create that response with a StringContent based on your string, something similar to the code below:

    public HttpResponseMessage Get()
    {
        string yourJson = GetJsonFromSomewhere();
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
        return response;
    }
    

    And checking null or empty JSON string

    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);
    }
    
    0 讨论(0)
提交回复
热议问题