我想在我的asp.net应用程序的一些HTTP模块(V 3.5,Visual Studio 2008中)整合和我不知道如何调试或使用这些模块在调试时在asp.net开发服务器火灾,当我运行web应用程序.
我是否需要在解决方案中包含模块源,或者我可以将DLL丢弃到BIN中?我来自1.1世界,还没有习惯asp.net开发服务器.
我想注册一个HttpHandler来包含根文件夹的所有子文件夹,无论它们嵌套多远.我希望使用下面的代码执行此操作,但事实上它只包含直接在根文件夹中的项目.
<httpHandlers>
<add verb="*" path="root/*" type="HandlerType, Assembly" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
我当然可以注册如下,以包含第二层的任何内容,但是还没有找到一种方法来在root下面说出任何东西.
<httpHandlers>
<add verb="*" path="root/*/*" type="HandlerType, Assembly" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)
帽子一直困扰着我很长一段时间,我很想听到一个简单的解决方案.
我想澄清的是,当我说"root"时,我并不是指应用程序的根目录,并且不一定有兴趣将应用程序中的所有请求发送到要处理的模块.
我正在实现一个简单的HttpModule,我想在Web应用程序启动时运行一些代码.但我很惊讶地发现我通常从Global.asax使用的Application_Start事件不能从HttpModule获得.这是正确的,还是我错过了什么?
如何从HttpModule挂钩到Application_Start事件?
更新:
我使用Init事件来解决简单的问题,但它对我来说仍然有点滑稽.
在IIS6中是否有使用ISAPI过滤器/扩展的原因?使用httphandler/http模块可以达到同样的效果.在IIS7中还有ISAPI被彻底删除了吗?IIS7的整个代码是用.Net编写的.我想知道是否应该详细了解ISAPI以进行调试或添加新功能?
什么时候使用HttpHandlers和HttpModules?
我不能在ASPX页面的代码后面编写代码吗?
我正在尝试找到一种方法来以编程方式检查是否加载了特定的HttpModule(作为我正在编写的组件需要模块正常工作).我尝试着:
bool ismodulepresent = false;
foreach(HttpModuleAction module in ((HttpModulesSection)ConfigurationManager.GetSection("system.web/httpModules")).Modules)
{
if(module.Type == typeof(MyModule).FullName)
{
ismodulepresent = true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但这仅适用于IIS5.1 <httpModules>部分,而不适用于较新的<system.webServer>部分.
有没有想过除了检查两个部分之外还有更好的方法吗?
我正在尝试创建一个改变Response.Filter类似的HttpModule (对于此演示,只需将过滤器设置回自身):
public class ContentTrafficMonitor : IHttpModule
{
public void Init( HttpApplication context )
{
context.BeginRequest += OnBeginRequest;
}
public void Dispose()
{
}
private static void OnBeginRequest( object sender, EventArgs e )
{
var application = (HttpApplication) sender;
application.Response.Filter = application.Response.Filter;
}
Run Code Online (Sandbox Code Playgroud)
}
这样做会将响应的传输编码设置为chunked,而不是使用Content-Length标头.
如果我删除设置的行Response.Filter,则响应确实有Content-Length标题.我们的应用程序取决于Content-Length标题,有什么方法可以防止这种行为?
我想捕获ASP.NET MVC应用程序中的请求的命中时间,处理时间,内存消耗和响应时间.
有没有办法或工具来执行此操作?
我遇到了一个特别有趣的情况.我有一个通用的错误处理例程当前工作.最近我注意到了一个有点奇怪的行为:HttpApplication.Error会启动,但HttpContext.Current会为空.这是我的HttpModule上的相关内容:
public void Init(HttpApplication context)
{
context.Error += context_Error;
context.PostMapRequestHandler += context_PostMapRequestHandler;
}
void context_PostMapRequestHandler(object sender, EventArgs e)
{
var aux = HttpContext.Current.Handler as Page;
if (aux != null) aux.Error += context_Error;
}
void context_Error(object sender, EventArgs e)
{
_localLog.Add("HttpApplication error handler reached.");
try
{
if (HttpContext.Current == null)
{
_localLog.Add("No HttpContext.");
}
else
{
var objError = HttpContext.Current.Server.GetLastError();
if (objError == null)
{
_localLog.Add("GetLastError(): no error.");
return;
}
//[Proper error handler follows here...]
}
} …Run Code Online (Sandbox Code Playgroud) 我目前有httpErrors设置处理500's: -
<httpErrors errorMode="Custom" existingResponse="Replace">
......
<remove statusCode="500"/>
<error statusCode="500" path="/server-error" responseMode="ExecuteURL"/>
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
这工作正常,但在iis收到错误的情况下,我仍然得到死亡的黄色屏幕.一个例子是当实体框架无法连接到数据库并且我收到: -
无法打开登录请求的数据库"Test-DB".
登录失败.
用户'sa'登录失败.
我已经设置customErrors好处理这个: -
<customErrors mode="On" defaultRedirect="error.html" redirectMode="ResponseRedirect">
<error statusCode="500" redirect="error.html" />
</customErrors>
Run Code Online (Sandbox Code Playgroud)
只要没有没有,它modules就能按预期工作preCondition="managedHandler".
我有几个模块处理图像和CSS文件,并在同一个项目中.
<modules runAllManagedModulesForAllRequests="false">
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
<add name="ImageHandler" type="foo.bar.ProductImageHandlerHttpModule" />
<add name="CustomCssHandler" type="foo.bar.CustomCssHttpModule" />
<add name="Glimpse" type="Glimpse.AspNet.HttpModule, Glimpse.AspNet" preCondition="integratedMode" />
</modules>
Run Code Online (Sandbox Code Playgroud)
评论这些,我得到了error.html,保持他们,我得到
运行时错误
说明:处理请求时发生异常.此外,执行第一个异常的自定义错误页面时发生另一个异常.请求已终止.
显示项目中的模块在尝试显示时也出错error.html.
有谁知道修复/解决方法?
httpmodule ×10
asp.net ×8
c# ×4
iis ×4
httphandler ×3
iis-7 ×3
asp.net-mvc ×2
.net ×1
handler ×1
isapi ×1
module ×1
performance ×1
vb.net ×1
web-config ×1