【发布时间】:2019-05-21 19:13:45
【问题描述】:
我将模型绑定到 ASP MVC 框架中的会话,如下所示:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Cart cart = null;
if(controllerContext.HttpContext.Session != null)
{
cart = (Cart)controllerContext.HttpContext.Session[sessionKey];
}
if(cart == null)
{
cart = new Cart();
if (controllerContext.HttpContext.Session != null)
{
controllerContext.HttpContext.Session[sessionKey] = cart;
}
}
return cart;
}
现在我想在 ASM MVC Core 中做同样的事情,这是我的尝试:
public Task BindModelAsync(ModelBindingContext bindingContext)
{
Cart cart = null;
if (bindingContext.HttpContext.Session != null)
{
cart = (Cart)JsonConvert.DeserializeObject(bindingContext.HttpContext.Session.GetString(sessionKey));
}
if (cart == null)
{
cart = new Cart();
if (bindingContext.HttpContext.Session != null)
{
bindingContext.HttpContext.Session.SetString(sessionKey, JsonConvert.SerializeObject(cart));
}
}
return Task.CompletedTask;
}
我也有模型绑定器提供者的类。
但是我在这一行得到一个运行时错误,说对象为空:
cart = (Cart)JsonConvert.DeserializeObject(bindingContext.HttpContext.Session.GetString(sessionKey));
“GetString(sessionKey)”返回的字符串为空。完整的信息是:
System.ArgumentNullException: 'Value cannot be null. Parameter name: value''.
【问题讨论】:
-
什么对象为空? full 错误信息是什么?上下文还是返回的字符串? .NET Core 代码不只是从 Session 中读取某些内容,它还尝试反序列化它。如果您将空值传递给
DeserializeObject,您将获得ArgumentNullException。您应该在尝试反序列化之前检查字符串的值 -
@PanagiotisKanavos 从“GetString(sessionKey)”返回的字符串为空。完整的消息是:“System.ArgumentNullException: 'Value cannot be null. Parameter name: value''。
标签: asp.net-core json.net custom-model-binder