c# - 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扩展。
推荐阅读
- c# - 附件不会上传到 .mdb,但不会发生任何错误
- css - AppBar 与其他元素重叠
- javascript - 向单选按钮添加 onclick 功能
- r - 将数据框中的一列与另一个数据框中的两列进行比较
- android - 当 Android 中的数组中的值超过 1 个时,Firestore whereArrayContains 不起作用
- android - Ionic cordova build android 失败:线程“main”java.lang.NullPointerException 中的异常
- sql - sys.aud$ 被删除了如何重建它
- android - 无法使用 Kotlin 更改已初始化的原始类型的值
- bash - 更改文件扩展名,但保留原始文件
- python - 在字典理解中使用条件:脚本问题