ASP.NET IHttpModule IHttpHandler IHttpHandlerFactory 拦截请求
先来看看代码,拦截所有Http请求类。下面包含了两种类的集成 IHttpModule IHttpHandlerFactory
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace SoonnetWebSite
{
/// <summary>
/// Handler2 的摘要说明
/// </summary>
public class Handler2 : IHttpModule
{
public void Dispose()
{
} private void Application_AcquireRequestState(Object source, EventArgs e)
{
HttpApplication httpApplication = (HttpApplication)source;
string url = httpApplication.Context.Request.Path.ToLower();
string imgPhysicalPath = httpApplication.Request.Url.ToString();
if (imgPhysicalPath.ToLower().IndexOf("https") != 0 && imgPhysicalPath.IndexOf("Video/VideoUpload.aspx") == -1 && imgPhysicalPath.IndexOf("Photo/PhotoUpload.aspx") == -1)
{
imgPhysicalPath = imgPhysicalPath.Replace("http", "https");
httpApplication.Response.Redirect(imgPhysicalPath);
return;
}
// httpApplication.Response.Redirect(imgPhysicalPath);
} public void Init(HttpApplication context)
{
context.AcquireRequestState += (new EventHandler(this.Application_AcquireRequestState));
}
//public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
//{
// IHttpHandler handler = null;
// string action = url.Substring(url.LastIndexOf("/", StringComparison.Ordinal) + 1);
// action = action.Substring(0, action.IndexOf(".", StringComparison.Ordinal));
// var Rurl = context.Request.RawUrl.Replace("/", ".");
// string actionClass = $"SoonnetWebSite.{Rurl}";
// if (true)
// { // } //} //public void ReleaseHandler(IHttpHandler handler)
//{
// throw new NotImplementedException();
//}
}
}
下面我们来看看IHttpHandler
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web; namespace SoonnetWebSite
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
private const string DEFAULTIMAGE_URL = "/SGL_Images/Userlogo_Big.jpg";
public void ProcessRequest(HttpContext context)
{
string imgPhysicalPath = context.Request.Url.ToString();
string rawUrl = context.Request.RawUrl.ToString();
System.Drawing.Image image = null;
if (File.Exists(context.Server.MapPath(rawUrl)))
{ //为空
image = System.Drawing.Image.FromFile(context.Server.MapPath(rawUrl));
}
else
{ //如果图片不存在,放上默认的图片
image = System.Drawing.Image.FromFile(context.Server.MapPath(DEFAULTIMAGE_URL));
}
//设置输出的类型
context.Response.ContentType = "image/jpeg";
//把图片保存到输出流里
image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
image.Dispose();
} public bool IsReusable
{
get
{
return false;
}
}
}
}
两端代码的配置如下
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1126400000" />
</requestFiltering>
</security>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="IHttpHandler" verb="GET,POST" path="LokARX.cc" type="SoonnetWebSite.Web_Data.Lok_ARequestX, SoonnetWebSite" />
<add name="IHttpHandler2" verb="GET" path="LokIF.cc" type="SoonnetWebSite.Web_Data.Lok_Interface, SoonnetWebSite" />
<add name="Handler1" verb="*" path="*.jpg" type="SoonnetWebSite.Handler1, SoonnetWebSite" />
</handlers>
<modules>
<add name="Handler2" type="SoonnetWebSite.Handler2,SoonnetWebSite" />
</modules>
</system.webServer>
发现个问题, IIS 配置的跟本机测试的节点不一样。线上的配置要用
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1126400000" />
</requestFiltering>
</security>
<validation validateIntegratedModeConfiguration="false" />
<HttpHandlers>
<add name="IHttpHandler" verb="GET,POST" path="LokARX.cc" type="SoonnetWebSite.Web_Data.Lok_ARequestX, SoonnetWebSite" />
<add name="IHttpHandler2" verb="GET" path="LokIF.cc" type="SoonnetWebSite.Web_Data.Lok_Interface, SoonnetWebSite" />
<add name="Handler1" verb="*" path="*.jpg" type="SoonnetWebSite.Handler1, SoonnetWebSite" />
</HttpHandlers>
<HttpModules>
<add name="Handler2" type="SoonnetWebSite.Handler2,SoonnetWebSite" />
</HttpModules>
</system.webServer>
前面配置多了一个http
是因为IIS 的经典模式跟集成模式的关系,
参考链接:https://blog.csdn.net/hongwei_23/article/details/44300923
http 转 https 参考链接:https://blog.csdn.net/suxuelian/article/details/80103514
ASP.NET IHttpModule IHttpHandler IHttpHandlerFactory 拦截请求的更多相关文章
- asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。
原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...
- Asp.Net 拦截请求自定义处理
需求: 在Aps.Net 应用中,对于浏览器请求的部分url的地址自定义处理,不交给路由系统或页面. 解决方案: 在全局文件Global.asax中 ,提供Application_BeginReque ...
- ASP.NET/MVC/Core的HTTP请求流程
ASP.NET HTTP管道(Pipeline)模型 1. 先讲一点,再深刻思考 一般我们都在写业务代码,优化页面,优化逻辑之间内徘徊.也许我们懂得HTTP,HTTPS的GET,POST,但是我们大部 ...
- 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程
简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.I ...
- ASP.NET MVC学前篇之请求流程
ASP.NET MVC学前篇之请求流程 请求流程描述 对于请求的流程,文章的重点是讲HttpApplication和HttpModule之间的关系,以及一个简单的示例实现.(HttpModule又是M ...
- Asp.Net MVC是否针对每次请求都重新创建一个控制器实例
一.Asp.Net MVC是否针对每次请求都重新创建一个控制器实例 默认情况下,答案是确定的. ControllerBuilder类 ControllerBuilder.Current用户获取默认的控 ...
- webapi拦截请求
[AttributeUsage(AttributeTargets.Method)] public class WebApiSensitive : ActionFilterAttribute { pub ...
- Asp.net 4.0,首次请求目录下的文件时响应很慢
原文:Asp.net 4.0,首次请求目录下的文件时响应很慢 1. 问题起因2. 尝试过的处理思路3. 解决方法 1. 问题起因 一个从VS2003(.Net Framework 1.1)升级到.ne ...
- Asp.net Core 入门实战 2.请求流程
Asp.Net Core 是开源,跨平台,模块化,快速而简单的Web框架. Asp.net Core官网的一个源码合集,方便一次性Clone,喜欢的(Star),本系列持续更新,也可以通过我的网站访问 ...
随机推荐
- Qt编写数据可视化大屏界面电子看板8-调整间距
一.前言 在数据可视化大屏界面电子看板系统中,前期为了使用目标客户机,调整间距是必不可少的工作,QMainWindow中的QDockWidget,会默认生成布局和QSplitter调整宽高大小,鼠标移 ...
- Java NIO学习笔记八 Pipe
Java NIO Pipe Java NIO管道是两个线程之间的单向数据连接.Pipe 具有源信道和接受通道.您将数据写入sink通道.然后可以从源通道读取该数据. 这是一个原理的Pipe流程图: J ...
- gitlab安装、下载、推送 代码(推荐)
环境: 内存必须5G以上 centos7.5 服务端:192.168.0.74 客户端:192.168.0.73 GitLab的安装 1.在CentOS系统上,下面的命令将会打开系统防火墙HTTP和S ...
- Day04:循环结构(while、do-while、for)
Java 循环结构 - while ,do...while,for 反复执行一段相同或相似代码的格式. 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java ...
- 简单实现react中虚拟DOM渲染
/** * @method createElement * @param type {string} * @param props {Object} * @param children {string ...
- skywalking 的安装部署及其远程应用
环境配置 centos 7.6 jdk 1.8 elasticsearch5.6.8 skyWalking3.2.6 1.安装elasticsearch wget https://artifacts. ...
- zepto手机拼音字母城市选择器代码
<!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...
- 连接池和JDBCTemplate
一:什么是连接池?使用连接池的好处是什么? 连接池就是一个存放数据库连接对象的容器.当系统初始化后,就会向数据库申请一些连接对象存放到容器里,用的时候直接从容器里取,用完后放回连接池. 连接池可以提高 ...
- solr7.2.1+tomcat8.5.37+jdk8安装配置
软件下载 solr7.2.1:http://archive.apache.org/dist/lucene/solr/7.2.1/solr-7.2.1.tgz 注意是.tgz结尾的文件,而不是.zip ...
- layer简单使用
官方:https://www.layui.com/doc/modules/layer.html 源码:https://github.com/xiaostudy/web_sample 效果 目录结构 代 ...