【.NET Core】你真的了解HttpRuntime类吗

简介: 【.NET Core】你真的了解HttpRuntime类吗

一、HttpRuntime概述

C# HttpRuntime是一个ASP.NET应用程序的核心类之一,它提供了一些有用的方法和属性,可以让ASP.NET应用程序中处理HTTP请求和响应。常见的用法包括:

  1. 获取当前请求的HttpContext对象
  2. 获取应用程序的虚拟地址
  3. 获取应用程序的物理路径
  4. 获取应用程序的配置信息
  5. 获取应用程序的缓存
  6. 启动应用程序的会话状态
  7. 调用Web服务类

在使用HttpRuntime类之前,需要先确保在ASP.NET应用程序中已经引用了System.Web命名空间。


二、HttpRuntime是什么包

C# HttpRuntime是一个包含一组静态方法和属性的类,它提供了一个用于处理HTTP请求的运行时环境。它通常用于ASP.NET Web应用程序中,可以用来获取当前应用程序的状态,处理请求,管理会话等。


HttpRuntime对象用于处理HTTP请求ASP.NET管道模型的开头。该方法ProcessRequest驱动所有后续ASP.NET Web处理。


三、HttpRuntime属性

  • AppDomainAppId:获取httpRuntime所在的应用程序域的应用程序标识
  • AppDomainAppPath:获取承载在当前应用程序域中的应用程序的应用程序目录的物理驱动器路径
  • AppDomainAppVirtualPath:获取包含承载在当前应用程序域中的应用程序的目录的虚拟路径
  • AppDomainId:获取HttpRuntime实例所在应用程序域的域标识
  • AspClientScriptPhysicalPath:获取 ASP.NET 客户端脚本文件的文件夹路径
  • AspClientScriptVitualPath:获取 ASP.NET 客户端脚本文件的虚拟路径
  • AspInstallDirectory:获取安装 ASP.NET 可执行文件的目录的物理路径
  • BinDirectory:获取当前应用程序的/bin目录的物理路径
  • Cache:获取当前应用程序的Cache
  • ClrInstallDirectory:获取安装公共语言运行时可执行文件的目录的物理路径
  • CodegeDir:获取 ASP.NET 存储当前应用程序的临时文件(生成的源、编译了的程序集等)的目录的物理路径
  • IsOnUNCShare:获取一个值,该值指示应用程序是否映射到通用命名约定 (UNC) 共享
  • MachineConfigurationDirectory:获取当前应用程序的 Machine.config 文件所在目录的物理路径
  • UsingIntegratedPipeline:获取一个值,该值指示当前应用程序是否在 IIS 7.0 的集成管道模式下运行


四、HttpRuntime方法

  • Close():关闭HttpRuntime实例
  • Equals(Object):确定指定对象是等于当前对象
  • GetHashCode():作为默认哈希函数
  • GetNamePermissionSet():返回与代码组关联的权限集
  • MemberwiseClone():创建当前Object的浅表副本
  • ProcessRequest(HttpWorkerRequest):驱动所有ASP.NET Web处理执行
  • UnLoadAppDomain():终止当前应用程序。应用程序在下次接收到请求时重新启动


五、HttpRuntime.Cache方法

HttpRuntime.Cache相当于就是一个缓存具体实现类,这个类虽然被放在了。但是非Web应用也是可以拿来用的。


HttpContext.Cache 是对上述缓存类的封装,由于封装到了 HttpContext ,局限于只能在知道 HttpContext 下使用,即只能用于 Web 应用


Page.Cache或HttpContext.Cache。实际上都是HttpRuntime.Cache的快捷方式,Page.Cache访问了HttpContext.Cache。


HttpRuntime.UnloadAppDomain()静态方法UnloadAppDomain()可以让我们用代码重新启动网站。通常用于用户通过程序界面修改了一个比较重要的参数。这时需要重启程序。


六、HttpRuntime.Cache应用

public class HttpRuntimeCache
{
    ///<summary>
    ///设置缓存时间,配置(从配置文件中读取)
    ///</summary>
    private const double Seconds = 30*24*60*60;
    ///<summary>
    ///缓存指定对象,设置缓存
    ///</summary>
    public static bool Set(string key, object value)
    {
        return Set(key, value, null, DateTime.Now.AddSeconds(Seconds),Cache.NoSlidingExpiration,CacheItemPriority.Default, null);
    }
    ///<summary>
    ///缓存指定对象,设置缓存
    ///</summary>
    public static bool Set(string key,object value,string path)
    {
        try
        {
           var cacheDependency = new CacheDependency(path);
           return Set(key, value, cacheDependency);
        }
        catch
        {
            return false;
        }
    }
    ///<summary>
    ///缓存指定对象,设置缓存
    ///</summary>
    public static bool Set(string key,object value,CacheDependency cacheDependency)
    {
        return Set(key,value,cacheDependency,Cache.NoAbsoluteExpiration,Cahe.NoSlidingExpiration,CacheItemPriority.Default,null);
    }
    
    ///<summary>
    ///缓存指定对象,设置缓存
    ///</summary>
    public static bool Set(string key,object value,double seconds,bool isAbsulute)
    {
        return Set(key,value,null,
                  (isAbsulute ? DateTime.Now.AddSeconds(seconds) :Cache.NoAbsoluteExpiration), 
                  (isAbsulute ? Cache.NoSlidingExpiration : TimeSpan.FromSeconds(seconds)), CacheItemPriority.Default,
                  null);
    }
    ///<summary>
    ///获取缓存对象
    ///<summary>
    public static object Get(string key)
    {
        return GetPrivate(key);
    }
    ///<summary>
    ///判断缓存中是否含有缓存该键
    ///<summary>
    public static bool Exists(string key)
    {
        return (GetPrivate(key) != null);
    }
    ///<summary>
    ///移除缓存对象
    ///</summary>
    ///<param name="key"></param>
    ///<returns></returns>
    public static bool Remove(string key)
    {
        if(string.IsNullOrEmpty(key))
        {
            return false;
        }
        HttpRuntime.Cache.Remove(key);
        return true;
    }
    ///<summary>
    ///移除所有缓存
    ///</summary>
    ///<returns></returns>
    public static bool RemoveAll()
    {
        IDictionaryEnumerator iDictionaryEnumerator = HttpRuntime.Cache.GetEnumerator();
        while (iDictionaryEnumerator.MoveNext())
        {
            HttpRuntime.Cache.Remove(Convert.ToString(iDictionaryEnumerator.Key));
        }
        return true;
    }
    ///<summary>
    ///设置缓存
    ///</summary>
    public static bool Set(string key, object value, CacheDependency cacheDependency, DateTime dateTime,TimeSpan timeSpan, CacheItemPriority cacheItemPriority, CacheItemRemovedCallback cacheItemRemovedCallback)
    {
        if (string.IsNullOrEmpty(key) || value == null)
        {
            return false;
        }
         HttpRuntime.Cache.Insert(key, value, cacheDependency, dateTime, timeSpan, cacheItemPriority,cacheItemRemovedCallback);
        return true;
    }
    ///<summary>
    ///获取缓存
    ///</summary>
    private static object GetPrivate(string key)
    {
        return string.IsNullOrEmpty(key) ? null : HttpRuntime.Cache.Get(key);
    }
    
    
}
目录
相关文章
|
25天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
40 5
|
3月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
3月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
101 0
|
6天前
|
JSON 安全 API
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
30 13
|
12天前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
54 2
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
46 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
1月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
28 3
|
9天前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
25 0
|
3月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
4月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。