Json Web API绑定到模型有时会引发异常

时间:2019-01-14 23:09:23

标签: c# asp.net-web-api model-view-controller

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

我在调用API之前记录了Json字符串,因此我可以查看字符串中的问题。我已经确定某些Unicode符号(例如商标TM)会导致失败,因此我将对其进行管理。

但是我最近有几个Json字符串引发了异常,我不知道为什么。我找不到unicode符号。现在我的用户在问为什么这种特定的工作方式失败了。

似乎内部MVC绑定例程读取了InputStream之后,就再也无法读取它了。的窍门:

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

抛出自己的异常,说在“内部存储由HttpRequest.GetBufferedInputStream的调用者填充”之前进行了调用。

  • 有没有一种方法可以窥探活页夹里面的东西,看看它cho死了什么 上?
  • 或是否有办法获得更好的异常消息?
  • 还是捕获并记录传入的数据流?

1 个答案:

答案 0 :(得分:0)

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

如果您使用的是ASP.NET Core MVC,则可以使用以下方法对启动代码启用快退功能:

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

    app.UseMvc();
}

对于您的最后一点,我可以推荐扩展为Audit.NETAudit.WebApi库。