标签: httpmodule

防止在ASP.NET 4.0中上载大文件

我们想在我们的网站上限制最大上传文件大小.我们已经在web.config中设置了适当的限制.我们遇到的问题是,如果上传了一个非常大的文件(例如1 GB),则在生成服务器端错误之前上传整个文件,并且无论文件是巨大的还是错误的类型都是不同的不.

有没有办法在实际上传之前检测挂起文件上传的大小?

这是我将相关请求限制为16 MB的相关web.config设置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <httpRuntime maxRequestLength="12288"/>
    </system.web>

    <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="12582912"/>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我已经尝试创建一个HTTP模块,这样我就可以在请求生命周期的早期拦截一个请求,但上传似乎甚至发生在以下BeginRequest事件之前HttpApplication:

public class UploadModule : IHttpModule
{
    private const int MaxUploadSize = 12582912;

    public void Init(HttpApplication context)
    {
        context.BeginRequest += handleBeginRequest;
    }

    public void Dispose()
    {
    }

    private void handleBeginRequest(object sender, EventArgs e)
    {
        // The upload takes place before this method gets called.

        var app = sender as HttpApplication; …
Run Code Online (Sandbox Code Playgroud)

asp.net iis-7 file-upload httpmodule httprequest

15
推荐指数
1
解决办法
4487
查看次数

如何在调用HttpContext.RewritePath()之后获取原始URL

我正在开发一个Web应用程序,它使用第三方HttpModule执行URL重写.

我想知道以后是否有任何方法可以在Application_BeginRequest事件中确定原始URL .例如...

原始网址:
http://domain.com/products/cool-hat.aspx

重写网址(来自第三方httpmodule):
http://domain.com/products.aspx?productId=123

在过去,我编写了HttpModules,它将原始url存储在HttpContext.Items中,但是,这是第三方应用程序,我无法做到这一点.

任何想法,将不胜感激.

asp.net url-rewriting httpmodule

14
推荐指数
4
解决办法
8581
查看次数

ASP.NET:您最常用的httpmodules

有兴趣描述最常用的ASP.NET httpmodules,它解决了webapp的特定问题.
欢迎提供最佳实践和现场使用.

.net c# windows asp.net httpmodule

13
推荐指数
3
解决办法
1521
查看次数

.NET可以拦截和更改css文件吗?

更新1:

我现在已经设置了IIS6,因此.NET可以处理对.css文件的调用.我现在要做什么来让它根据referal url更改css文件?因此,如果referal url是http:// intranet/,它应该继续调用旧样式表.如果referal url是http:// intranetv2 /,它应该调用新的样式表.


原始问题:

的背景:

我有2个搜索引擎.1是旧的,另一个是全新的(开发阶段).搜索引擎1在domain1.com上,搜索引擎2在domain2.com上.两个域都在同一台服务器上.两者都根据用户输入搜索引擎的内容在domain1.com上搜索网页.两个搜索引擎之间的区别在于新的搜索引擎更快,产生更准确的结果,并且具有极大改进的用户界面.两个搜索引擎都将保持活跃状态​​,以便用户可以在他们自己的时间内习惯新的搜索引擎,而不是仅仅将它们扔进深层并完全删除旧的搜索引擎.

无论如何,基本上,足够的背景,因为可搜索的页面使用旧的搜索引擎驻留在旧域名上,而新的搜索引擎位于新的域名上,...

问题:

...我可以使用HttpModule,或.NET的其他部分,或IIS6中的某些东西,甚至捕获新搜索引擎生成的页面链接,并动态更改附加到旧域上旧的可搜索页面的css文件?

原因:

实际上使它看起来像一个完整的全新网站,如果旧域上的搜索引擎用于访问旧域上的页面,则使用旧样式表,但如果新域上的搜索引擎用于访问旧域名上的可搜索文件,应使用新的样式表使旧页面看起来新.由于有大量可搜索的页面,在10,000的区域内,编辑每个页面以添加if语句以在向页面添加样式表之前检查引用域名是不现实的选择.

环境:

旧的搜索引擎,以及旧域上的可搜索页面使用.net 1.something,但新域名上的新搜索引擎使用.net 3.5,我使用vb.net作为asp.net页面.该服务器是IIS6服务器.

.net asp.net httpmodule .net-1.0 .net-3.5

13
推荐指数
1
解决办法
3432
查看次数

在IIS中管理后台线程有哪些最佳实践?

我写了一个HttpModule,它产生了一个后台线程.我正在使用线程,就像在进程中运行的预定任务一样,这非常方便.

跟踪此主题的最佳做法是什么?我以前从未这样做过,而且我对它的某些方面感到有些困惑:

  1. 我怎么知道线程是否仍在运行?我认为它可以完成它的工作,但还有另一种方法可以知道它是否还活着吗?我下载procmon中,但w3wp.exe的产生一个一大堆的线程,所以我不知道这是我的线程.我命名了,但这没有用.

  2. 如果线程死了怎么"抓住"线程?是否存在某种Dispose方法,我可以将其写入EventLog或其他内容,如果它失败了?一个"垂死的宣言"还是什么?

  3. 如何主动停止线程?如果我希望它停止运行此后台进程,如何在不必退回IIS的情况下将其终止?

  4. 无论如何都要重新启动它,独立于HttpModule?(我猜这个答案是否定的......)

编辑:只是为了澄清,意图是我的线程永远不会消失.它运行一个函数,然后进入睡眠状态几分钟,然后唤醒并再次运行该函数.它不像是在完成一项任务然后结束.

asp.net multithreading httpmodule

12
推荐指数
2
解决办法
5490
查看次数

HttpModule.Init - 在IIS7集成模式下安全地添加HttpApplication.BeginRequest处理程序

我的问题类似但不完全相同:

为什么我的主机(softsyshosting.com)不支持BeginRequest和EndRequest事件处理程序?(我也读过其中引用的mvolo博客)

目标是成功地在IHttpModule.Init事件(或模块内部的任何地方)中挂钩HttpApplication.BeginRequest,使用通过system.webServer配置集成的普通HttpModule,即不会:

  1. 入侵Global.asax或
  2. 覆盖HttpApplication(该模块旨在自包含和可重用,所以例如我有这样的配置):

    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="TheHttpModule" />
      <add name="TheHttpModule" type="Company.HttpModules.TheHttpModule" preCondition="managedHandler" /> 
    
    Run Code Online (Sandbox Code Playgroud)

到目前为止,我试图将一个监听器附加到HttpApplication.BeginRequest的任何策略都会产生以下两种情况之一:症状1是BeginRequest永远不会触发,或者症状2是所有托管请求都抛出以下异常,我不能从用户代码中捕获并处理它:

Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification notification, Boolean isPostEvent) +30
System.Web.PipelineStepManager.ResumeSteps(Exception error) +1112
System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +113
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +616
Run Code Online (Sandbox Code Playgroud)

app.BeginRequest += new EventHandler(this.OnBeginRequest)在Init中注释会停止例外.Init根本不引用Context或Request对象.

我试过了:

  • 在项目的任何位置删除对HttpContext.Current的所有引用(仍然是症状1)
  • 测试从我的OnBeginRequest方法的主体中删除所有代码,以确保问题不在方法的内部(=异常)
  • 嗅探堆栈跟踪并仅调用app.BeginRequest + = ...如果堆栈未由InitializeApplication启动(= BeginRequest未激活)
  • 仅在第二次通过Init时调用app.BeginRequest + =(= BeginRequest未触发)

有人知道一个好方法吗?在模块中挂钩Application_Start是否存在一些间接策略(似乎不太可能)?另一个事件:a)可以从模块的构造函数或Init方法挂钩,以及b)随后是附加BeginRequest事件处理程序的安全位置?

非常感谢

c# iis-7 httpmodule integrated-pipeline-mode

12
推荐指数
1
解决办法
8270
查看次数

IIS7应用程序请求路由(arr反向代理)与托管模块相结合 - 超时

我正在尝试构建一个代理服务器来处理对内部站点的请求(隐藏原点),但同时检查数据包并异步后处理它们.

例如,假设所有对http://www.foo.com的 SOAP调用都将转到http://192.168.1.1,同时存储在数据库中进行后期分析.内部服务器是一个黑盒子,所以更改它的内容超出了这个问题的范围.

无论如何,我已经配置了ARR,使用反向代理,使用通配符制作URL重写过滤器,所有工作都完美无瑕.然后,我尝试添加一个用C#编写的托管HttpModule,并挂钩到Application_BeginRequest和Application_EndRequest.我能够在最终请求(应用程序池处于集成模式)中访问请求标头,响应标头,甚至能够通过在Response.Filter上设置过滤器来读取输出流中的响应内容,该过滤器将所有写入缓存在附加内存流中.

问题是,当我尝试读取(在模块BeginRequest处理程序内)来自请求的输入流时,ARR会停留一段时间并抛出一个

HTTP错误502.3 - 错误网关操作超时处理程序ApplicationRequestRoutingHandler错误代码0x80072ee2

所以它超时了.

查看失败的请求跟踪我看到:

MODULE_SET_RESPONSE_ERROR_STATUS警告ModuleName ="ApplicationRequestRouting",Notification ="EXECUTE_REQUEST_HANDLER",HttpStatus ="502",HttpReason ="Bad Gateway",HttpSubStatus ="3",ErrorCode ="2147954402",ConfigExceptionInfo =""SET_RESPONSE_ERROR_DESCRIPTION警告ErrorDescription ="操作时间到"

现在网上的任何类似帖子都没有帮助,因为这不是超时错误(代理有120秒设置,页面答案不到100毫秒),以及我评论试图读取FORM数据的处理程序代码的那一刻或者InputStream数据,一切都可以作为魅力.

即使我在读取后将输入流的位置设置为0,我仍然会有超时.如果我在EndRequest上读取输入流,它将获得0个字节,即使它是POST请求.(这显然是错的)

ARR是否有一个错误,我尝试在尝试重新路由之前尝试读取输入流?

使用的东西:Windows Server 2008 R2 IIS 7.5 ARR v2 .Net Framework 3.5模块

想法?谢谢/ Cosmin

iis-7 timeout reverse-proxy httpmodule

12
推荐指数
2
解决办法
1万
查看次数

IoC依赖注入自定义HTTP模块 - 如何?(ASP.NET)

我有一个自定义HTTP模块.我想使用我的IoC框架注入记录器,因此我可以在模块中记录错误.但是,当然我没有得到构造函数,因此无法将其注入其中.最好的方法是什么?

如果您需要特定的IoC容器 - 我目前正在使用Windsor,但可能很快就会转向AutoFac.

谢谢

asp.net dependency-injection inversion-of-control httpmodule

11
推荐指数
2
解决办法
8731
查看次数

我可以确定HttpModules是按照它们在HttpApplication.Modules集合中列出的顺序执行的吗?

我想写一个IHttpModule必须严格执行的FormsAuthenticationModule,否则它将是无用的.

HttpContext.Current.ApplicationInstance.Modules属性返回IHttpModules 的集合.我可以检查我的模块是否FormsAuthenticationModule在此集合中.

这还够吗?该集合是否IHttpModule按照执行顺序列出?

.net asp.net iis httpmodule

11
推荐指数
1
解决办法
2604
查看次数

在HttpModule中挂钩到Application_Start

我正在实现一个简单的HttpModule,我想在Web应用程序启动时运行一些代码.但我很惊讶地发现我通常从Global.asax使用的Application_Start事件不能从HttpModule获得.这是正确的,还是我错过了什么?

如何从HttpModule挂钩到Application_Start事件?

更新:
我使用Init事件来解决简单的问题,但它对我来说仍然有点滑稽.

.net c# vb.net asp.net httpmodule

10
推荐指数
1
解决办法
9001
查看次数