2017-08-27 33 views
-1

我有位指示方法简单的.NET芯WEP API应用这样如何从C#.net core web api中删除BOM JsonResult响应?

[HttpGet("{id}")] 
    public ActionResult Get(int id) 
    { 
     var myObj= _testRepository.TryGetById(id); 
     if (myObj== null) 
     { 
      return new NotFoundResult(); 
     } 
     return new JsonResult(myObj); 

    } 

curl -ivs --raw该方法返回与BOM符号JSON响应。

响应例如:

92 
{"id":767,"gender":"f","birth_date":-278121600} 
0 

如何从响应删除BOM?

UPDATE

完全响应例如:

HTTP/1.1 200 OK 
Date: Sat, 26 Aug 2017 12:28:58 GMT 
Content-Type: application/json; charset=utf-8 
Server: Kestrel 
Transfer-Encoding: chunked 

60 
{"id":582,"place":"Площадь","country":"Япония","city":"Ньюква","distance":86} 
0 

其中数字是和不是BOM(我这里的错误)。他们造成的chunked transfer encoding

+0

您使用的是什么版本的ASP.NET WebAPI和JSON.NET?此行为是一个错误,并在2014年得到修复:https://github.com/aspnet/Mvc/issues/577 – Dai

+0

我正在使用软件包Microsoft.AspNetCore 1.1.2,Microsoft.AspNetCore,Mvc 1.1.3和Newtonsoft.Json 10.0.3 – Frank59

+0

别担心你的英文@Frank59,对我来说这似乎很好。如果你可以避免在评论中提到这一点,那将会很棒 - 它不会真的增加手头的问题,但它确实给志愿编辑更多的工作要做。谢谢! – halfer

回答

1

有关物料清单的注释和JsonResult第一个:JsonResultExecutor使用HttpResponseStreamWriter无论使用何种编码,它都不会写入BOM。

现在关于块传输编码:

大多数客户已经移除分块,通常我们关于没有必要担心。

还有一些禁用分块的一些方法:

  1. 可以使用ContentResult而不是JsonResult

    public ActionResult Get(int id) 
    { 
        var myObj= _testRepository.TryGetById(id); 
        if (myObj== null) 
        { 
         return new NotFoundResult(); 
        } 
        return new ContentResult{ContentType="application/json", Content=DoMySerialize(myObj)}; 
    
    } 
    
  2. 您可以完全缓冲响应并确定内容长度。这里有一个缓冲的所有响应中间件提供 https://github.com/aspnet/BasicMiddleware/blob/793a49fe111d86895f22300297fa70f710459406/src/Microsoft.AspNetCore.Buffering/ResponseBufferingMiddleware.cs#L19

有详细的注释里面question on github样本。

相关问题