【发布时间】:2017-09-01 11:35:48
【问题描述】:
我有一个安静的 WebAPI 应用程序来处理来自 AngularJS 应用程序的请求。需要 GET 动词的控制器操作可以正常工作,但不返回任何内容的 POST/PUT 操作将引发 Nullreference 异常。
例子:
[HttpPut]
public void Update()
这在函数执行返回后给我以下消息:
System.NullReferenceException: Object reference not set to an instance of an object. <SendAsync>d__0.MoveNext
它还会向客户端返回 HTTP 状态码 204。
通过将方法签名更改为异步并返回一个空对象,它将按预期工作:
[HttpPut]
[Route("")]
public async Task<object> Update(ProfileViewModel model)
{
_profileManager.Update(model);
return Ok(new {});
}
请注意,仅返回状态代码 200 是行不通的。部分内容也必须返回,否则抛出异常。
这发生在每个不是 GET 的请求上,包括 DELETE。如何在不必更改签名并为每个方法返回匿名对象的情况下解决此问题?
【问题讨论】:
-
1.请围绕您的更新方法分享更多代码。 2.您是否使用任何自定义格式化程序/模型绑定器?
-
我用完整的 Update() 方法更新了这个问题,正如你所见,它并没有做太多。关于格式化程序,是的 - 我使用格式化程序进行自定义 Json 序列化。
-
在尝试对其进行更新之前,您需要明确检查 Null 模型对象。那应该避免空引用异常。
标签: asp.net rest asp.net-web-api