Json Web API绑定到模型有时抛出异常



我有一个WebAPI(不确定是哪个版本,但它是在VS2017中创建的),它接收Json字符串并将其绑定到控制器中的模型。大多数时候,这种方法都很好。偶尔,当我第一次尝试访问类实例时,它会抛出异常。很明显,绑定例程失败了,但异常消息没有帮助:对象引用没有设置为对象的实例。我猜测绑定器正在失败,甚至没有创建我的对象的空实例。

我在调用API之前记录Json字符串,这样我就可以查看字符串中的问题。我已经发现某些unicode符号(如商标TM)会导致失败,所以我正在管理这些符号。

但我最近有几个Json字符串抛出了异常,我不知道为什么。我找不到任何unicode符号。现在我的用户在问为什么这种特定风格的工作会失败。

看来InputStream一旦被内部MVC绑定例程读取,就再也无法读取了。技巧:

HttpContext.Current.Request.InputStream.Position = 0;
string streamresult = new System.IO.StreamReader(HttpContext.Current.Request.GetBufferedInputStream()).ReadToEnd();

抛出自己的异常,称调用是在"内部存储被HttpRequest.GetBufferedInputStream的调用方填充"之前进行的。

  • 有没有办法偷看活页夹里面,看看它卡住了什么上
  • 或者有没有办法获得更好的异常消息
  • 或者捕获并记录传入的数据流

如果您想读取请求正文,您需要在其流上启用倒带,否则请求正文只能读取一次,因为默认情况下它是仅向前流。

如果你使用的是ASP.NET Core MVC,你可以使用在启动代码上启用倒带

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Use(async (context, next) => {  // <----
context.Request.EnableRewind();
await next();
});
app.UseMvc();
}

关于最后一点,我可以推荐Audit.NET库及其Audit.WebApi扩展。

最新更新