标签: httphandler

从运行时在数据库中呈现ASPX页面

假设代码如下:

public class DynamicAspxHandler : IHttpHandler {
    bool IHttpHandler.IsReusable { get { return false; } }

    void IHttpHandler.ProcessRequest(HttpContext httpContext) {
        string aspxContent = PlainASPXContent();
        Page page = CreatePage(httpContext, aspxContent);
        page.ProcessRequest(httpContext);
    }

    Page CreatePage(HttpContext context, string aspxContent) {
        // How to implement this?
    }
}
Run Code Online (Sandbox Code Playgroud)

如何实现CreatePage方法基于ASPX的纯字符串内容实例化页面?

注意,ASPX字符串本身可以包含对磁盘上已存在的MasterPage的引用.

我意识到这一点必然存在巨大的性能问题,但在这个阶段我只想知道如何做到这一点.显然我必须缓存结果.

谢谢.

.net asp.net dynamic-compilation httphandler

7
推荐指数
1
解决办法
1988
查看次数

HTTP Handler使用Cassini,但不适用于IIS 6

我已经创建了一个示例项目来简化我的问题.我有这个简单的处理程序:

public class HandleThis : IHttpHandler, IRequiresSessionState
{

    public void ProcessRequest( System.Web.HttpContext context )
    {
        // Score.aspx just says "success"
        context.Response.Redirect( "Score.aspx" );
    }

    public bool IsReusable { get { return true; } }
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的配置中,我有这个:

<httpHandlers>
<add verb="*"
path="Survey"
type="HttpHandlerTest.HandleThis, HttpHandlerTest" />
Run Code Online (Sandbox Code Playgroud)

现在,当我点击http:// server/Survey我的处理程序触发时.

如果我将项目更改为使用IIS 6运行,则不会触发(404).我尝试通过以下方式在IIS中手动添加处理程序: - 网站属性 - 主目录 - 配置 - 添加(浏览到我的网站的.dll),扩展:调查,取消选中"验证文件是否存在"

我注意到IIS(如此有用)添加了"." 在我的扩展面前,所以我用"b.Survey"点击了网站; 仍然是404.

当然可以在IIS 6中添加处理程序吗?

asp.net iis-6 httphandler

6
推荐指数
1
解决办法
3853
查看次数

通配符HttpHandler不处理静态文件

我看了一些较老的问题,但我找不到任何东西.

我在我的网络应用程序上有一个Wildcard HttpHandler,正在处理网址并确定它是否能用它做任何事情

如果它不能,那么StaticFile Handler应该把它拿起来,然后将它作为静态文件(如html文件)提供.

问题是,它通过通配符处理程序,然后似乎没有去StaticFileHander.我需要对Wildcard处理程序或Web配置做些什么吗?

这是我的web.config:

<add name="Wildcard" path="*" verb="*" type="Rewriter.RewriterHttpModule"
 modules="IsapiModule"  requireAccess="None" allowPathInfo="false" 
 preCondition="" responseBufferLimit="4194304" />

<add name="StaticFile" path="*.*" verb="*" 
 modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" 
 scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" 
 resourceType="File" requireAccess="Read" allowPathInfo="false" preCondition="" 
 responseBufferLimit="4194304" />
Run Code Online (Sandbox Code Playgroud)

asp.net web-config httphandler

6
推荐指数
1
解决办法
3510
查看次数

分析elmah日志

我在我的一些Web应用程序中使用elmah.我想知道是否有任何报告实用程序或工具可以分析/扫描所有日志并生成报告以向我显示日志中的常见错误.我喜欢http://demo.l4ndash.com/PageDashboard/Dashboard.aspx上的那个,但它适用于Log4Net而不是Elmah.

.net asp.net elmah httphandler web

6
推荐指数
1
解决办法
1922
查看次数

如何使用IIS下的HTTP处理程序处理长时间运行的请求?

我需要在IIS中处理长时间运行的请求,处理请求本身非常轻量级,但主要是由于IO需要花费大量时间.基本上我需要查询另一台服务器,有时会查询第三台服​​务器.所以我想同时处理尽可能多的请求.为此,我需要异步处理请求如何正确处理?

使用Socket类我可以轻松地写出类似的东西:

// ..listening code
// ..Accepting code

void CalledOnRecive(Request request)
{
    //process the request  a little
    Context context = new Context()
    context.Socket  = request.Socket;
    remoteServer.Begin_LongRunningDemonicMethod(request.someParameter, DoneCallBack, context);
}

void DoneCallBack( )
{
    IAsyncresult result = remoteServer.Begin_CallSomeVeryLongRunningDemonicMethod( request.someParameter, DoneCallBack, context);

    Socket socket = result.Context.Socket;
    socket.Send(result.Result);
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,一旦我调用"Begin ..."方法就释放线程,并且响应在另一个线程上发送,因此您可以轻松实现非常高的并发性.你如何在IIS内的HTTP处理程序中做同样的事情?

.net c# asp.net iis httphandler

6
推荐指数
1
解决办法
1399
查看次数

如果发生异常,"Content-encoding"标头将从HttpHandler响应中消失

我有一个自定义的HttpHandler,我在其中手动启用输出压缩,如下所示:

context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
Run Code Online (Sandbox Code Playgroud)

这适用于大多数请求,但遇到异常时,"Content-encoding"标头会从响应中消失,而压缩过滤器仍保留在原位.结果是错误页面被gzip压缩,但是浏览器没有收到表示该事实的标题.然后浏览器尝试将仍然压缩的数据显示为文本,即gobbledygook.

完整的测试用例代码如下所示.尝试交替禁用压缩或不抛出异常.

有人可以解释为什么"内容编码"标题消失了吗?

我想我可以简单地启用压缩作为处理程序的最后一件事,因此如果遇到异常,它永远不会到达添加压缩过滤器的点; 但我看到的行为让我感到害怕.谁能确认一下?

public class TestHandler : IHttpHandler 
{
    public void ProcessRequest(HttpContext context)
    {
        CompressResponse(context);
        context.Response.Write("Hello world");

        // Throw an exception for testing purposes
        throw new Exception("Just testing...");
    }

    private void CompressResponse(HttpContext context)
    {
        string acceptEncoding = context.Request.Headers["Accept-Encoding"];
        if (String.IsNullOrEmpty(acceptEncoding))
        {
            return;
        }

        // gzip or wildcard
        if (acceptEncoding.ToLower().Contains("gzip") || acceptEncoding.Contains("*"))
        {
            context.Response.AppendHeader("Content-encoding", "gzip");
            context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
            return;
        }

        // Also handles deflate (not …
Run Code Online (Sandbox Code Playgroud)

c# asp.net httphandler http-compression http-headers

6
推荐指数
1
解决办法
2889
查看次数

使用WebHandler的HTTPHandler和IsReusable

我有可重用HTTPHandler的问题.我想查看该IsReusable物业是如何运作的.所以我创建了两个处理程序:

可重复使用:

public class ReusableHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return true; }
    }

    private int _counter;

    public ReusableHandler()
    {
        _counter = 0;
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write("Reusable: " + _counter++);
    }

}
Run Code Online (Sandbox Code Playgroud)

而不是可重复使用的:

public class NonReusableHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return false; }
    }

    private int _counter;

    public NonReusableHandler()
    {
        _counter = 0;
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write("NonReusable: " + _counter++);
    }

}
Run Code Online (Sandbox Code Playgroud)

它们都按预期工作:每次返回递增值时可重用,而NonReusable每次返回0.但是当我使用我的处理程序作为WebHandlers(*.ashx)时,它们每次都返回0(代码完全相同).这是否意味着当我使用WebHandlers时,该 …

asp.net httphandler

6
推荐指数
1
解决办法
1278
查看次数

处理通用http处理程序中的会话超时

我有一个应用程序,其中约20个http generic handler用于ajax call.
我用IReadOnlySessionState我的处理程序访问会话.一切正常.

但是当会话到期时,我的处理程序返回一些html,因为它重定向到默认页面,并且默认页面的html在响应中被发回.

要克服这个问题.
我已经检查了处理程序中的会话变量,如果它是null,我已经写了

 context.Response.Write("logout")
Run Code Online (Sandbox Code Playgroud)

我检查jQuery ajax天气它是注销或其他任何东西.

  $.ajax({
            url: "myhandler.ashx",
            contentType: "application/json; charset=utf-8",
            success: function (data) { checklogout(data); $("#loading").hide(); },
            error: function () { $("#loading").hide(); },
            async: false
         });
Run Code Online (Sandbox Code Playgroud)


如果它是注销,那么我使用位置重定向到登录页面.
form-authentication用来验证用户.

有没有更好的方法来检查和使用jquery-ajax调用重定向到登录页面.

asp.net session httphandler form-authentication

6
推荐指数
1
解决办法
1695
查看次数

清理字符串以防止相对URI路径

我创建了这个HTTP处理程序来更新本地SQL Express数据库中的信息.

我意识到用户可以使用相对URI路径"/../../file.zip"作为查询字符串,并且能够下载受限区域之外的文件.

该网站尚未生效,所以现在不是安全问题,但我真的想要阻止这样的事情.

我添加了一个简单的string.replace行,它从输入查询中删除任何"..".

我还有什么需要做的吗?

public void ProcessRequest(HttpContext context)
{
    string filesPath = "C:/Downloads/";
    string fileName = context.Request.QueryString["filename"];
    fileName = fileName.Replace("'", "''").Replace("..", "").Replace("/", "").Replace("\\", "");

    if (!string.IsNullOrEmpty(fileName) && File.Exists(filesPath + fileName))
    {
        context.Response.ContentType = "application/octet-stream";
        context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=\"{0}\"", fileName));
        context.Response.WriteFile(filesPath + fileName);
        //Do work to update SQL database here
    }
    else
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write(filesPath + fileName + " Invalid filename");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net security httphandler sanitize

6
推荐指数
1
解决办法
1944
查看次数

页面生命周期中的进程请求方法

我需要理解以下陈述

声明 - 1

最常见的处理程序是处理.aspx文件的ASP.NET页面处理程序.当用户请求.aspx文件时,页面通过页面处理程序处理请求.

声明 - 2

例如,您可以编写自己的图像来从数据库而不是从Web服务器本身提供图像等,或编写简单的POX服务(而不是SOAP/WCF /等)

声明 - 3

ProcessRequest在Page Life Cycle中的重要性是什么?

asp.net webforms httphandler

6
推荐指数
2
解决办法
4560
查看次数