相关疑难解决方法(0)

ASP.Net 5 MVC 6 - 如何使用FromBody在POST上返回无效的JSON消息?

我正在使用.Net 4.5.1创建一个使用MVC 6的ASP.Net 5应用程序.我有一个POST方法,它使用FromBody参数自动获取对象.

[HttpPost]
public IActionResult Insert([FromBody]Agent agent)
{    
    try
    {
        var id = service.Insert(agent);
        return Ok(id);
    }
    catch (Exception ex)
    {
        return HttpBadRequest(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

这只是一个概念的证明,我不会只返回成功的id或错误的完整异常.

当发送有效的JSON时,一切正常.但是,当发送无效的JSON时,我在调试期间收到异常:

抛出异常:Newtonsoft.Json.dll中的'Newtonsoft.Json.JsonReaderException'

附加信息:解析值后,遇到意外字符:l.路径'名称',第2行,第20位.

问题是在此错误之后,该方法被正常调用,但是使用null参数,并且异常不会传播.

我可以检查null并返回一个通用消息,但这并不像原始消息那样有用,它包含重要信息,例如标记名称和无效字符的位置.

所以我想捕获此异常并将其返回给HTTP调用者.我怎么做?像这样的东西:

{"error": "After parsing a value an unexpected character was encountered: l. Path 'Name', line 2, position 20"}
Run Code Online (Sandbox Code Playgroud)

我知道我可以在try/catch块中手动捕获和反序列化JSON,但这对我来说是不可接受的.我想这样做并继续使用FromBody,我发现它很有效率.

c# asp.net-mvc asp.net-core-mvc

7
推荐指数
2
解决办法
2553
查看次数

在哪里可以找到ASP.NET Core MVC中的模型绑定错误?

在对对象执行模型绑定时,如果任何对象的属性存在类型不匹配,则框架似乎将返回null.例如,考虑这个简单的例子:

public class Client
{
    public string Name { get; set; }
    public int Age { get; set; }
    public DateTime RegistrationDate { get; set; }
}

public class ClientController : Controller
{
    [HttpPatch]
    public IActionResult Patch([FromBody]Client client)
    {
        return Ok("Success!");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我提交"ASDF"的HTTP请求年龄属性的值,整个客户端的参数将在贴片法空,不管什么已提交的其他属性.RegistrationDate属性也是一样.因此,当您的控制器操作中的FromBody参数为null时,您如何知道哪些错误导致模型绑定失败(在这种情况下,哪个提交的属性具有错误的类型)?

c# asp.net-core-mvc asp.net-core

4
推荐指数
1
解决办法
2862
查看次数

标签 统计

asp.net-core-mvc ×2

c# ×2

asp.net-core ×1

asp.net-mvc ×1