Return a JSON string explicitly from Asp.net WEBAPI?
在某些情况下,我有newtonsoft json.net,在我的控制器中,我只是从控制器返回jobject,一切都很好。
但是我有一个案例,我从另一个服务中得到一些原始的JSON,需要从我的WebAPI中返回它。在这种情况下,我不能使用newtonsoft,但是如果我可以,那么我将从字符串中创建一个jobject(这看起来像是不需要的处理开销),并返回它,这一切都将很好地与世界。
但是,我希望简单地返回这个值,但是如果我返回字符串,那么客户机将收到一个JSON包装器,其上下文是一个编码字符串。
如何从WebAPI控制器方法显式返回JSON?
有几种选择。最简单的方法是让您的方法返回一个
1 2 3 4 5 6 7 | public HttpResponseMessage Get() { string yourJson = GetJsonFromSomewhere(); var response = this.Request.CreateResponse(HttpStatusCode.OK); response.Content = new StringContent(yourJson, Encoding.UTF8,"application/json"); return response; } |
并检查空JSON字符串
1 2 3 4 5 6 7 8 9 10 11 | 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); } |
以下是@carlosfigueira的解决方案,它适用于使用WebAPI2引入的IHttpactionResult接口:
1 2 3 4 5 6 7 8 9 10 | 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); } |
如果您特别希望只返回JSON,而不使用WebAPI特性(如允许XML),则可以直接写入输出。假设您使用ASP.NET托管此对象,那么您可以访问
从web api get方法返回json数据的示例
1 2 3 4 5 | [HttpGet] public IActionResult Get() { return Content("{"firstName": "John", "lastName": "Doe", "lastUpdateTimeStamp": "2018-07-30T18:25:43.511Z", "nextUpdateTimeStamp": "2018-08-30T18:25:43.511Z"); } |