响应正文中的无效字符
Invalid characters on response body
我正在将现有的 MVC5 json 网络服务迁移到完整框架 (NET 4.6.1) 上的 AspNet Core RC2 运行。
每个控制器都继承自 _BaseController:
public class _BaseController : Controller
{
public IActionResult Success(object data) { return Json({ IsSuccess = true, Data = data }); }
public IActionResult Error(string message) { return Json({ IsSuccess = false, Message = message }); }
}
这是一个示例控制器:
public class SampleController : _BaseController
{
public IActionResult Something() { return Success(new { FirstItem = "First", SecondItem = "Second", ThirdItem = 1 }); }
}
在 RC1 上这工作正常。反应很好。
更新到 RC2 后,JSON 响应现在包含一些 strange/invalid 个字符。
来自 Fiddler,这是原始(有效)响应:
{"isSuccess":true,"data":{"firstItem":"first","secondItem":"second","thirdItem":1}}
但是 RC2 提供了这样的无效响应(来自 Fiddler 的完整原始响应,与 .NET winforms 客户端收到的响应相同):
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
X-Powered-By: ASP.NET
Date: Tue, 28 Jun 2016 20:38:55 GMT
3de
{"sucesso":true,"dados":{"codigo":1,"dataUltimaAtualizacao":"2016-06-27T00:00:00","horaUltimaAtualizacao":"17:18:06.8099844","offsetHoraUltimaAtualizacao":-180,"cnpj":"23303829000169","razaoSocial":"NACIONAL SOFT LTDA","nomeFantasia":"NACIONAL SOFT","tipoEstabelecimento":"MATRIZ","inicioAtividade":"1987-05-13T00:00:00","atividadePrimaria":"62.03-1-00 - Desenvolvimento e licenciamento de programas de computador não-customizáveis","atividadesSecundarias":"62.02-3-00 - Desenvolvimento e licenciamento de programas de computador customizáveis","naturezaJuridica":"206-2 - SOCIEDADE EMPRESARIA LIMITADA","logradouro":"R HORTENCIA","numero":"591","complemento":"CONJUNTO 01","bairro":"ESPLANADA","municipio":"BELO HORIZONTE","uf":"MG","cep":"30280250","enderecoEletronico":"","telefone":"","enteFederativoResponsavel":"*****","situacaoCadastral":"ATIVA","dataSituacaoCadastral":"2005-11-03T00:00:00","motivoSituacaoCadastral":"","situacaoEspecial":"********","dataSituacaoEspecial":null}}
0
这让我发疯。有谁知道它是否与 Kestrel 和 IIS 之间的集成有关?有什么线索吗?
是的,正如 CodeCaster 评论的那样,这完全是关于响应的问题。
我也会尝试修复客户端,但 对此有修复。
因此,如果有人再次遇到此问题,只需在 package.json
上添加对 Microsoft.AspNetCore.Buffering
的引用,并在 Startup.cs
上添加此行:
app.UseResponseBuffering();
我正在将现有的 MVC5 json 网络服务迁移到完整框架 (NET 4.6.1) 上的 AspNet Core RC2 运行。
每个控制器都继承自 _BaseController:
public class _BaseController : Controller
{
public IActionResult Success(object data) { return Json({ IsSuccess = true, Data = data }); }
public IActionResult Error(string message) { return Json({ IsSuccess = false, Message = message }); }
}
这是一个示例控制器:
public class SampleController : _BaseController
{
public IActionResult Something() { return Success(new { FirstItem = "First", SecondItem = "Second", ThirdItem = 1 }); }
}
在 RC1 上这工作正常。反应很好。
更新到 RC2 后,JSON 响应现在包含一些 strange/invalid 个字符。
来自 Fiddler,这是原始(有效)响应:
{"isSuccess":true,"data":{"firstItem":"first","secondItem":"second","thirdItem":1}}
但是 RC2 提供了这样的无效响应(来自 Fiddler 的完整原始响应,与 .NET winforms 客户端收到的响应相同):
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
X-Powered-By: ASP.NET
Date: Tue, 28 Jun 2016 20:38:55 GMT
3de
{"sucesso":true,"dados":{"codigo":1,"dataUltimaAtualizacao":"2016-06-27T00:00:00","horaUltimaAtualizacao":"17:18:06.8099844","offsetHoraUltimaAtualizacao":-180,"cnpj":"23303829000169","razaoSocial":"NACIONAL SOFT LTDA","nomeFantasia":"NACIONAL SOFT","tipoEstabelecimento":"MATRIZ","inicioAtividade":"1987-05-13T00:00:00","atividadePrimaria":"62.03-1-00 - Desenvolvimento e licenciamento de programas de computador não-customizáveis","atividadesSecundarias":"62.02-3-00 - Desenvolvimento e licenciamento de programas de computador customizáveis","naturezaJuridica":"206-2 - SOCIEDADE EMPRESARIA LIMITADA","logradouro":"R HORTENCIA","numero":"591","complemento":"CONJUNTO 01","bairro":"ESPLANADA","municipio":"BELO HORIZONTE","uf":"MG","cep":"30280250","enderecoEletronico":"","telefone":"","enteFederativoResponsavel":"*****","situacaoCadastral":"ATIVA","dataSituacaoCadastral":"2005-11-03T00:00:00","motivoSituacaoCadastral":"","situacaoEspecial":"********","dataSituacaoEspecial":null}}
0
这让我发疯。有谁知道它是否与 Kestrel 和 IIS 之间的集成有关?有什么线索吗?
是的,正如 CodeCaster 评论的那样,这完全是关于响应的问题。
我也会尝试修复客户端,但
因此,如果有人再次遇到此问题,只需在 package.json
上添加对 Microsoft.AspNetCore.Buffering
的引用,并在 Startup.cs
上添加此行:
app.UseResponseBuffering();