如何将模型绑定到 ASP MVC Core 中的会话

伊万

我将模型绑定到 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''.
帕纳吉奥蒂斯·卡纳沃斯

这个问题没有提到抛出什么异常,但是这个代码在第一次尝试从会话中读取时肯定会失败。

第二个片段试图反序列化一个字符串而不检查它是否为空:

cart=(Cart)JsonConvert.DeserializeObject(bindingContext.HttpContext.Session.GetString(sessionKey));

或者,以更易读的方式:

var json=bindingContext.HttpContext.Session.GetString(sessionKey);
cart = (Cart)JsonConvert.DeserializeObject(json);

JsonConvert.DeserializeObject() 如果它的参数为空,则会抛出。

调用.json之前必须检查 json 字符串DeserializeObject通过一些清理,代码可能如下所示:

var session=bindingContext.HttpContext.Session;
if(session == null)
{
    return null;
}
var json = sessio.GetString(sessionKey);
if (!String.IsNullOrWhitespace(json))
{
    var cart=JsonConvert.DeserializeObject<Cart>(json);
    return cart;
}
else
{  
    var emptyCart=new Cart();
    var value=JsonConvert.SerializeObject(emptyCart);
    session.SetString(sessionKey, value);
    return emptyCart;
}

null 安全运算符可用于处理缺失的上下文值,例如在测试期间:

var session=bindingContext?.HttpContext?.Session;

如果任何对象为 null,这将返回 null。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从ASP .NET Core MVC 1.0中的视图访问会话

来自分类Dev

如何将<select>值绑定到ASP.NET Core MVC枚举中每个项目的名称?

来自分类Dev

如何将数据表绑定到ASP.net MVC中的下拉列表?

来自分类Dev

我如何将Ienumerable类牢固绑定到MVC asp.net中的视图?

来自分类Dev

如何将数据绑定到ASP.NET MVC Razor中的布局模板

来自分类Dev

如何将json数据绑定到Asp.MVC5中的dropdownlist?

来自分类Dev

如何在Asp.Net Core MVC 1.0(aka MVC 6 RC1)中访问会话超时值?

来自分类Dev

如何将模型从视图传递到ASP.NET MVC4中的javascript

来自分类Dev

如何在Asp.Net MVC 4中将复杂属性绑定到多态模型中?

来自分类Dev

如何将Polymer元素绑定到ASP.NET中的模型

来自分类Dev

如何将文本框绑定到datetime字段,但仅显示其日期部分(在ASP.MVC中)?

来自分类Dev

如何将文本框绑定到datetime字段,但仅显示其日期部分(在ASP.MVC中)?

来自分类Dev

如何在ASP.NET MVC中重置会话超时

来自分类Dev

将json字符串绑定到asp.net MVC中的模型

来自分类Dev

将路线和正文中的多个参数绑定到ASP.NET Core中的模型

来自分类Dev

在 ASP .Net Core MVC 2.1 模型中访问 List<T>

来自分类Dev

如何将视图重定向到主页-ASP.NET Core MVC

来自分类Dev

在ASP.NET Core MVC6中将文件和模型发布到控制器

来自分类常见问题

在ASP.NET Core MVC中在运行时动态绑定模型

来自分类Dev

在ASP.NET Core MVC中在运行时动态绑定模型

来自分类Dev

如何使用DropDownList绑定到WebGrid剃须刀ASP Net MVC 4中的模型?

来自分类Dev

ASP.Net MVC中的会话为空时,如何延长会话时间?

来自分类Dev

ASP.NET Core MVC - 在运行时绑定到模型

来自分类Dev

ASP NET Core MVC-如何配置进程外会话状态?

来自分类Dev

如何使用ASP.NET MVC(或Core)检测和重定向无cookie会话?

来自分类Dev

ASP.NET Core 3 MVC:对象列表的模型绑定

来自分类Dev

如何将 MVC 中的动态绑定代码从 .NET Framework 迁移到 .NET Core?

来自分类Dev

在ASP .NET MVC中存储会话数据

来自分类Dev

在ASP .NET MVC中存储会话数据

Related 相关文章

  1. 1

    如何从ASP .NET Core MVC 1.0中的视图访问会话

  2. 2

    如何将<select>值绑定到ASP.NET Core MVC枚举中每个项目的名称?

  3. 3

    如何将数据表绑定到ASP.net MVC中的下拉列表?

  4. 4

    我如何将Ienumerable类牢固绑定到MVC asp.net中的视图?

  5. 5

    如何将数据绑定到ASP.NET MVC Razor中的布局模板

  6. 6

    如何将json数据绑定到Asp.MVC5中的dropdownlist?

  7. 7

    如何在Asp.Net Core MVC 1.0(aka MVC 6 RC1)中访问会话超时值?

  8. 8

    如何将模型从视图传递到ASP.NET MVC4中的javascript

  9. 9

    如何在Asp.Net MVC 4中将复杂属性绑定到多态模型中?

  10. 10

    如何将Polymer元素绑定到ASP.NET中的模型

  11. 11

    如何将文本框绑定到datetime字段,但仅显示其日期部分(在ASP.MVC中)?

  12. 12

    如何将文本框绑定到datetime字段,但仅显示其日期部分(在ASP.MVC中)?

  13. 13

    如何在ASP.NET MVC中重置会话超时

  14. 14

    将json字符串绑定到asp.net MVC中的模型

  15. 15

    将路线和正文中的多个参数绑定到ASP.NET Core中的模型

  16. 16

    在 ASP .Net Core MVC 2.1 模型中访问 List<T>

  17. 17

    如何将视图重定向到主页-ASP.NET Core MVC

  18. 18

    在ASP.NET Core MVC6中将文件和模型发布到控制器

  19. 19

    在ASP.NET Core MVC中在运行时动态绑定模型

  20. 20

    在ASP.NET Core MVC中在运行时动态绑定模型

  21. 21

    如何使用DropDownList绑定到WebGrid剃须刀ASP Net MVC 4中的模型?

  22. 22

    ASP.Net MVC中的会话为空时,如何延长会话时间?

  23. 23

    ASP.NET Core MVC - 在运行时绑定到模型

  24. 24

    ASP NET Core MVC-如何配置进程外会话状态?

  25. 25

    如何使用ASP.NET MVC(或Core)检测和重定向无cookie会话?

  26. 26

    ASP.NET Core 3 MVC:对象列表的模型绑定

  27. 27

    如何将 MVC 中的动态绑定代码从 .NET Framework 迁移到 .NET Core?

  28. 28

    在ASP .NET MVC中存储会话数据

  29. 29

    在ASP .NET MVC中存储会话数据

热门标签

归档