WebAPI控制器在后台抛出异常
我有一个安静的WebAPI应用程序,处理来自AngularJS应用程序的请求。需要GET动词的控制器动作可以正常工作,但POST/PUT不返回任何内容的动作会引发Nullreference异常。WebAPI控制器在后台抛出异常
实施例:
[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。我如何解决这个问题,而不必更改签名并为每一种方法返回一个匿名对象?
- 请试试这个代码,而无需任何_profileManager.Update(模型);
- 如果您使用.net核心,请使用IActionResult。
- return Ok()不强制你返回任何东西,并应该工作。
- 如果这不起作用,然后检查您的自定义序列化程序中的任何错误。
-
如果该工程然后放回您的_profileManager.Update(模型),并检查是否抛出任何错误。
[HttpPut] [Route("")] public async Task<IHttpActionResult> Update(ProfileViewModel model) { return Ok(); }
谢谢,我会试试这个,结果回来给你。 –
请尝试单元测试您的序列化程序。如果有任何问题,会导致问题的来源更快 – Gurpreet
在注释掉Startup类中的所有配置语句之后,我发现它是这条线创建了这个不良行为: 'WebApiConfig.MessageHandlers.Insert(0,新的ServerCompressionHandler(新的GZipCompressor(),新的DeflateCompressor()));' 这个包甚至已经被弃用了,因此我必须找到另一个处理请求压缩的解决方案。[打包链接](https://www.nuget.org/packages/Microsoft.AspNet.WebApi.MessageHandlers.Compression/) 谢谢@Gurpreet –
您不必返回对象:
[HttpPost]
public IActionResult Update()
{
return Ok();
}
这将返回一个200响应,但异常将抛出。 –
如果你用这段代码得到异常,你还有一些问题。 –
1。请分享更多一点你的代码在你的更新方法。 2.您是否使用任何自定义格式器/模型活页夹? – Gurpreet
我用完整的Update()方法更新了这个问题,正如你所看到的那样,它没有太多的工作。关于格式化程序,是的 - 我使用格式化程序进行自定义Json序列化。 –
[什么是NullReferenceException,以及如何解决它?]可能的重复(https://*.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it ) – Igor