广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NET Core管理应用程序状态
  • 498
分享到

ASP.NET Core管理应用程序状态

2024-04-02 19:04:59 498人浏览 八月长安
摘要

在ASP.net core中,由多种途径可以对应用程序状态进行管理,使用哪种途径,由检索状态的时机和方式决定。 应用程序状态指的是用于描述当前状况的任意数据。包括全局和用户特有的数据

ASP.net core中,由多种途径可以对应用程序状态进行管理,使用哪种途径,由检索状态的时机和方式决定。

应用程序状态指的是用于描述当前状况的任意数据。包括全局和用户特有的数据。

开发人员可以根据不同的因素来选择不同的方式存储状态数据:

  • 数据需要存储多久
  • 数据有多大
  • 数据的格式是什么
  • 数据是否可以序列化
  • 数据有多敏感
  • 数据能否保存在客户端

 1.可选方式

1.HttpContext.Items

当数据仅用于一个请求中时,用Items集合存储时最好的方式。数据将在每个请求结束之后丢弃。它是组件和中间件在一个请求中的不同时间点金总互相通信的最佳手段。

HttpContext抽象提供了一个简单的IDictionary<object,object>类型的字典集合,就是Items。在每个请求中,这个集合从HttpRequest开始就可以使用,直到请求结束丢弃。要想存取集合,可以直接赋值和根据键查询。

app.Use(async (context,next) =>
            {
                context.Items["isExist"] = true;
                await next.Invoke();
            });

            //在之后的管道查询值
            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Is Exist:"+context.Items["isExist"]);
            });

2.QueryString 和 Post

在查询字符串(QueryString )中添加值,或利用Post发送数据,可以将一个请求的状态数据提供给另一个请求。这不适合敏感数据,因为这需要将数据发送到客户端,然后再发送给服务器。这种方法也只适用于少量数据。用户提交的数据是无法预期的,带查询字符串的网址很容易泄露,所以要避免跨网站请求伪装攻击(CSRF)。

3.Cookies

与状态有关的小量数据可以存储在Cookies中。他们会随每次请求被发送到客户端。应该只使用一个标识符,真正的数据存储在服务端,服务端的数据与这个标识关联。

4.Session

会话存储依靠一个基于Cookie的标识符来访问与给定浏览器相关的会话数据。一个会话可以与多个Cookie关联。

5.Cache

缓存提供了一种方法,用自定义的键对应用程序数据进行存储和检索。它提供了一套基于时间和其他因素使缓存过期的规则。

6.其他

还可以使用EF和数据库等进行存储应用程序状态。

2.使用Session

首先要安装Microsoft.Aspnetcore.Session安装包。然后在Startup类中配置。Session是基于IDistributedCache构建的,因此必须先配置好Session,否则会报错。

services.ADDDistributedMemoryCache();
            services.AddSession(options =>
            {
                options.Cookie.Name = "Test.Session";
                options.IdleTimeout = TimeSpan.FromSeconds(10);
            });

asp.net 提供了IDistributedCache的多种实现,in-memory是其中之一。上面采用in-memory,需要先安装Microsoft.Extensions.Caching.Memory,然后添加上面代码。

最后在Configure中调用 app.UseSession(),需要在app.Usemvc使用之前调用。

(1)实现细节

Session利用一个cookie来跟踪和区分不同浏览器发出的请求。默认情况下,这个cookie被命名为“.ASP.Session”,并使用路径“/”。默认情况下,这个cookie不指定域,而且对于页面的客户端脚本是不可使用的,因为CookieHttpOnly默认为True。

其他的值可以通过SessionOptions配置:   

services.AddSession(options =>
            {
                options.Cookie.Name = "Test.Session";
                options.IdleTimeout = TimeSpan.FromSeconds(10);
            });

IdleTimeout 在服务端决定过期时间,session的过期时间是独立于cookie的。

(2)ISession

安装和配置好session之后,就可以通过HttpContext的一个名为Session,类型为ISession的属性来引用会话。

public interface ISession
    {
        //
        // 摘要:
        //     Indicate whether the current session has loaded.
        bool IsAvailable { get; }
        //
        // 摘要:
        //     A unique identifier for the current session. This is not the same as the session
        //     cookie since the cookie lifetime may not be the same as the session entry lifetime
        //     in the data store.
        string Id { get; }
        //
        // 摘要:
        //     Enumerates all the keys, if any.
        IEnumerable<string> Keys { get; }

        //
        // 摘要:
        //     Remove all entries from the current session, if any. The session cookie is not
        //     removed.
        void Clear();
        //
        // 摘要:
        //     Store the session in the data store. This may throw if the data store is unavailable.
        Task CommitAsync(CancellationToken cancellationToken = default(CancellationToken));
        //
        // 摘要:
        //     Load the session from the data store. This may throw if the data store is unavailable.
        Task LoadAsync(CancellationToken cancellationToken = default(CancellationToken));
        //
        // 摘要:
        //     Remove the given key from the session if present.
        //
        // 参数:
        //   key:
        void Remove(string key);
        //
        // 摘要:
        //     Set the given key and value in the current session. This will throw if the session
        //     was not established prior to sending the response.
        //
        // 参数:
        //   key:
        //
        //   value:
        void Set(string key, byte[] value);
        //
        // 摘要:
        //     Retrieve the value of the given key, if present.
        //
        // 参数:
        //   key:
        //
        //   value:
        bool TryGetValue(string key, out byte[] value);
    }

因为Session是建立在IDistributedCache之上的,所以总是需要序列化被存储的对象实例。因此,这个接口是使用byte[]而不是直接使用object。string 和 int32 的简单类型可以直接使用:

HttpContext.Session.SetInt32("key",123);
            HttpContext.Session.GetInt32("key");

存储对象需要先把对象序列化为一个byte[]字节流。需要使用MemoryStream 和 BinaryFORMatter

/// <summary> 
        /// 将一个object对象序列化,返回一个byte[]         
        /// </summary> 
        /// <param name="obj">能序列化的对象</param>         
        /// <returns></returns> 
        public static byte[] ObjectToBytes(object obj)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                IFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); return ms.GetBuffer();
            }
        }
        /// <summary> 
        /// 将一个序列化后的byte[]数组还原         
        /// </summary>
        /// <param name="Bytes"></param>         
        /// <returns></returns> 
        public static object BytesToObject(byte[] Bytes)
        {
            using (MemoryStream ms = new MemoryStream(Bytes))
            {
                IFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(ms);
            }
        }

到此这篇关于ASP.net core管理应用程序状态的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: ASP.NET Core管理应用程序状态

本文链接: https://www.lsjlt.com/news/145839.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ASP.NET Core管理应用程序状态
    在ASP.NET Core中,由多种途径可以对应用程序状态进行管理,使用哪种途径,由检索状态的时机和方式决定。 应用程序状态指的是用于描述当前状况的任意数据。包括全局和用户特有的数据...
    99+
    2022-11-13
  • ASP.NET Core怎么管理应用程序状态
    这篇文章主要介绍了ASP.NET Core怎么管理应用程序状态的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ASP.NET Core怎么管理应用程序状态文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-30
  • 在ASP.Net Core应用程序中使用Bootstrap4
    笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了。 ASp.Net Core 中,通常在&n...
    99+
    2022-11-12
  • 怎么创建ASP.NET Core Web应用程序
    本文小编为大家详细介绍“怎么创建ASP.NET Core Web应用程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么创建ASP.NET Core Web应用程序”文章能帮助大家解决疑惑,下面跟...
    99+
    2023-06-29
  • 使用Supervisor守护ASP.NET Core应用程序进程
    目录一、前言二、Supervisor1、安装Python包管理工具2、安装Supervisor3、配置Supervisor应用守护4、配置Supervisor开机启动三、总结一、前言...
    99+
    2022-11-13
  • Linux上使用Docker部署ASP.NET Core应用程序
    一、创建 1、创建应用程序 使用ASP.NET Core创建一个MVC应用程序,并修改Home控制器Index视图代码: @{ ViewData["Title"] = "Ho...
    99+
    2022-11-13
  • 如何在ASP.Net Core应用程序中使用Bootstrap4
    本篇内容介绍了“如何在ASP.Net Core应用程序中使用Bootstrap4”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!笔者...
    99+
    2023-06-26
  • 如何使用Supervisor守护ASP.NET Core应用程序进程
    本文小编为大家详细介绍“如何使用Supervisor守护ASP.NET Core应用程序进程”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用Supervisor守护ASP.NET Core应用程序进程”文章能帮助...
    99+
    2023-06-29
  • Linux上如何使用Docker部署ASP.NET Core应用程序
    这篇文章将为大家详细讲解有关Linux上如何使用Docker部署ASP.NET Core应用程序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、创建1、创建应用程序使用ASP.NET Core...
    99+
    2023-06-29
  • 如何用 ASP.NET Core 实现高性能的 Web 应用程序?
    ASP.NET Core 是一个跨平台的开源框架,用于构建 Web 应用程序。它具有高性能、可扩展性和安全性等特点,因此成为了许多企业和开发者的首选。本文将介绍如何使用 ASP.NET Core 实现高性能的 Web 应用程序。 使用异步...
    99+
    2023-07-23
    bash leetcode 并发
  • 创建ASP.NET Core Web应用程序并介绍项目模板
    目录创建ASP.NET Web 应用程序运行ASP.NET Core Web 应用程序:ASP.NET Core应用程序模板空APIWeb应用程序模板Web应用程序(模型视图-控制器...
    99+
    2022-11-13
  • 微信小程序的全局状态管理 — mobx-miniprogram
    一、简介 在小程序中,常常有些数据需要在几个页面或组件中共享。使用 MobX 来管理小程序的跨页面数据,  其实类似于vuex的store。 小程序的 MobX 绑定辅助库。 此 behavior 依赖开发者工具的 npm 构建。具体...
    99+
    2023-10-11
    微信小程序 前端 小程序
  • ASP.NET的HTTP模块和处理程序对话状态是怎样的
    这篇文章主要介绍“ASP.NET的HTTP模块和处理程序对话状态是怎样的”,在日常操作中,相信很多人在ASP.NET的HTTP模块和处理程序对话状态是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP...
    99+
    2023-06-17
  • ASP.NET Core 能否让你更高效地编写 Web 应用程序?
    ASP.NET Core 是微软推出的一款跨平台、开源、高性能的 Web 应用程序框架。自发布以来,它已经成为了许多开发者的首选框架。本文将探讨 ASP.NET Core 是否能够让你更高效地编写 Web 应用程序。 什么是 ASP.NET...
    99+
    2023-07-10
    leetcode npm linux
  • NumPy和ASP.NET Core:如何在Web应用程序中使用二维码?
    在现代的Web应用程序中,使用二维码成为了一种普遍的方式,可以帮助用户快速地获取相关信息,例如产品信息、活动详情等等。在本篇文章中,我们将介绍如何使用NumPy和ASP.NET Core创建一个简单的Web应用程序,并在其中使用二维码。 ...
    99+
    2023-08-26
    numy 二维码 numpy
  • Mobx实现React 应用的状态管理详解
    目录MobX从一个 demo 开始创建类并将其转化成可观察对象使用可观察对象MobX 与 React 集成在组件中使用可观察对象1. 访问全局的类实例2. 通过 props3. 通过...
    99+
    2022-12-08
    Mobx React 应用状态管理 Mobx React
  • 在NumPy中创建QR码:使用ASP.NET Core在Web应用程序中实现
    QR码是一种二维码,可以存储大量信息,包括URL、文本、联系人信息等。在现代数字化时代,QR码已经成为了一种非常重要的信息传递方式。在本文中,我们将介绍如何使用NumPy创建QR码,并将其集成到ASP.NET Core Web应用程序中。...
    99+
    2023-08-26
    numy 二维码 numpy
  • 如何判断 .NET Core 应用程序以管理员身份运行的
    目录1.euid2.setuid3.Demo有时候,我们需要知道当前程序是否以管理员身份运行,以便执行一些需要特殊权限的操作。 在github上找到了一个解决方案: //需要引用nu...
    99+
    2022-11-13
  • 怎么判断.NET Core应用程序是以管理员身份运行的
    这篇文章主要介绍了怎么判断.NET Core应用程序是以管理员身份运行的的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么判断.NET Core应用程序是以管理员身份运行的文章都会有所收获,...
    99+
    2023-06-29
  • Vue3状态管理之Pinia的入门使用教程
    目录Vue3 新的发展方向(来源于尤大知乎)一、Pinia 简介与基础1.1 Pinia 简介1.2 Pinia 基础二、Pinia 在Vue3-Vite中的使用2.1 基础使用流程...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作