我正在尝试拦截每个aspx请求。拦截有效,但页面保持空白。我错过了什么?
namespace WebSite
{
public class Class1 : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
}
}
}
<system.webServer>
<handlers>
<add name="SampleHandler" verb="*"
path="*.aspx"
type="WebSite.Class1, WebSite"
resourceType="Unspecified" />
</handlers>
</system.webServer>
答案 0 :(得分:2)
您正在拦截页面请求,然后您没有对其执行任何操作。如果你希望看到某种输出,你必须对传入的HttpContext执行某种操作。下面是一些文章,在处理HttpContext时可能是不错的阅读。简而言之,如果您希望看到响应,则必须为其生成一些内容。
http://odetocode.com/Articles/112.aspx
What is the difference between HttpContext.Current.Response and Page.Response?
http://www.c-sharpcorner.com/uploadfile/desaijm/asp.netposturl11282005005516am/asp.netposturl.aspx
答案 1 :(得分:0)
你并没有真正拦截他们。这更像是劫持他们。每个* .aspx请求都将转到此处理程序而不是实际的* .aspx页面。更合适的方法是让您查看Application_BeginRequest
中的global.asax
处理程序。
答案 2 :(得分:0)
我使用IhttpHandler接口来处理我的图像返回。
IHttpHandlerFactory是我用来处理页面拦截的东西:
public class HttpCMSHandlerFactory : IHttpHandlerFactory
{
// collects page name requested
string pageName = Path.GetFileNameWithoutExtension(context.Request.PhysicalPath);
// Add the page name to the context
context.Items.Add("PageName", pageName);
// I can still check if the page physically exists else pass on to my CMS handler: CMSPage.aspx
FileInfo fi = new FileInfo(context.Request.MapPath(context.Request.CurrentExecutionFilePath));
if (fi.Exists == false)
{
// if page doesnt exist context info is passed on to CMSPage to handle copy
return PageParser.GetCompiledPageInstance(string.Concat(context.Request.ApplicationPath, "/CMSPage.aspx"), url, context);
}
else
{
// if page exist physical page is returned
return PageParser.GetCompiledPageInstance(context.Request.CurrentExecutionFilePath, fi.FullName, context);
}
}