标签: ihttphandler

bool IsReusable在http处理程序接口中的意义

在编写http处理程序/模块时,有一个实现的接口成员叫做bool IsReusable.

这个成员有什么意义?如果我将其设置为false(或true),这对于其他Web应用程序意味着什么?

asp.net httphandler ihttphandler

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

IHttpHandler.IsReusable有什么用?

我正在写一个IHttpHandler,我需要实现一个IsReusable属性.当我查看MSDN文档时,它说:

获取一个值,该值指示另一个请求是否可以使用IHttpHandler实例.

这不是很有帮助.在哪种情况下我应该使用可重用的处理程序,在哪种情况下它不应该是可重用的?

跟进问题:

  1. 什么是重用?
  2. 我可以保持状态(即类变量)Reusable = true吗?

c# asp.net asp.net-mvc ihttphandler system.web

102
推荐指数
3
解决办法
2万
查看次数

什么是ASP.NET中的HttpHandler

ASP.NET中的HttpHandler是什么?为什么以及如何使用它?

asp.net httphandler ihttpasynchandler ihttphandler

66
推荐指数
2
解决办法
10万
查看次数

如何在ASP.Net中发送状态代码500并仍然写入响应?

我有一个ASP.Net单文件Web服务(.ashx包含IHttpHandler实现的文件),它需要能够将错误返回为具有500个内部服务器错误状态代码的响应.这在PHP中是相对简单的事情:

header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";
Run Code Online (Sandbox Code Playgroud)

ASP.Net(C#)等效应该是:

Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Context.Response.ContentType = "text/plain";
Context.Response.Write("Unable to connect to database on " + dbHost);
Run Code Online (Sandbox Code Playgroud)

当然,这不能按预期工作; 相反,IIS拦截500状态代码,删除我写入Response对象的任何内容,并发送调试信息或自定义错误页面,具体取决于应用程序的配置方式.

我的问题 - 我怎样才能抑制这种IIS行为并直接从我的IHttpHandler实现中发送错误信息?

这个应用程序是PHP的一个端口; 客户端已经写好了,所以我基本上坚持这个规范.错误地发送200状态代码的错误不适合模具.

理想情况下,我需要以编程方式控制行为,因为这是我们要分发的SDK的一部分,而没有任何" 编辑此文件 "和" 更改此IIS设置 "补充说明.

谢谢!

编辑:已排序.Context.Response.TrySkipIisCustomErrors = true是票.哇.

c# asp.net rest ihttphandler

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

ASP.NET:如何从处理程序访问Session?

我正在尝试一些值存储在会话处理程序页面,我做一个重定向到一个页面的WebForms,这将拿起之前会话值和预填的WebForm:

public class Handler : IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      ...
      context.Session["StackOverflow"] = "overflowing";
      context.Response.Redirect("~/AnotherPage.aspx");
      ...
   }
   ...
 }
Run Code Online (Sandbox Code Playgroud)

除了context.Sessionobject是null.

如何从处理程序访问会话状态?

asp.net session session-state handler ihttphandler

47
推荐指数
3
解决办法
4万
查看次数

为什么不调用我的IHttpHandler?

我正在尝试使用自定义处理程序来处理ASP.NET 3.5中的特定URL(或一组URL).

处理程序实际上并没有做任何重要的事情 - 它只是记录请求.我可以发布代码,如果有任何相关的东西,但我真的不认为它被调用.(特别是,对于正常的异常,我得到一个自定义错误页面并记录...这里我只是得到了香草IIS 404.)

这是web.config文件的相关位:

<system.web>
  <httpHandlers>
    <add verb="GET,POST" path="*.robot" validate="false" 
         type="CSharpInDepth.Wave.RobotHandler, CSharpInDepth"/>
  </httpHandlers>
</system.web>
Run Code Online (Sandbox Code Playgroud)

(显然,该部分还有其他内容,但我不认为这是相关的.)

在本地,在开发服务器下运行,它工作正常.在我的真实盒子上,我总是得到一个404.网站目录下的一切都是一样的(通过svn复制).这包括我已验证包含的bin目录.CSharpInDepth.dllCSharpInDepth.Wave.RobotHandler

我尝试获取http://csharpindepth.com/foo.robot并获得404.

我已尝试使用和不使用程序集名称,特定URL或通配符......没有任何工作.

我确定我在IIS配置中的某个地方错过了一些简单的标志,但是如果我能找到它,我就会被炸毁......

编辑:这是IIS版本6.现在尝试将*.robot添加到ISAPI过滤器...

asp.net ihttphandler

26
推荐指数
2
解决办法
3630
查看次数

ASP.NET Routing可用于为.ashx(IHttpHander)处理程序创建"干净"的URL吗?

我有一些使用普通旧IHttpHandler的REST服务.我想生成更干净的URL,以便我在路径中没有.ashx.有没有办法使用ASP.NET路由创建映射到ashx处理程序的路由?我以前见过这些类型的路线:

// Route to an aspx page
RouteTable.Routes.MapPageRoute("route-name",
    "some/path/{arg}",
    "~/Pages/SomePage.aspx");

// Route for a WCF service
RouteTable.Routes.Add(new ServiceRoute("Services/SomeService",
    new WebServiceHostFactory(),
    typeof(SomeService)));
Run Code Online (Sandbox Code Playgroud)

尝试使用会RouteTable.Routes.MapPageRoute()产生错误(处理程序不会派生出错Page). System.Web.Routing.RouteBase似乎只有2个派生类:ServiceRoute用于服务,DynamicDataRoute用于MVC.我不确定是什么MapPageRoute()(Reflector没有显示方法体,它只显示"在NGen图像边界内嵌这种方法的性能至关重要").

我看到它RouteBase没有密封,并且有一个相对简单的界面:

public abstract RouteData GetRouteData(HttpContextBase httpContext);

public abstract VirtualPathData GetVirtualPath(RequestContext requestContext,
    RouteValueDictionary values);
Run Code Online (Sandbox Code Playgroud)

所以也许我可以制作自己的HttpHandlerRoute.我会给出一个镜头,但如果有人知道现有的或内置的映射路由到IHttpHandlers的方式,这将是伟大的.

asp.net asp.net-routing ihttphandler

26
推荐指数
5
解决办法
1万
查看次数

来自HttpHandler的图片不会在浏览器中缓存

我正在使用IHttpHandler从数据库提供图像.相关代码在这里:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "image/jpeg";
    int imageID;
    if (int.TryParse(context.Request.QueryString["id"], out imageID))
    {
        var photo = new CoasterPhoto(imageID);
        if (photo.CoasterPhotoID == 0)
            context.Response.StatusCode = 404;
        else
        {
            byte[] imageData = GetImageData(photo);
            context.Response.OutputStream.Write(imageData, 0, imageData.Length);
            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(5));
            context.Response.Cache.SetLastModified(photo.SubmitDate);
        }
    }
    else
        context.Response.StatusCode = 404;
}
Run Code Online (Sandbox Code Playgroud)

问题是浏览器不会缓存图像,大概是因为我没有在响应头中指出正确的东西.我认为HttpCachePolicy属性上的部分调用方法会强制浏览器保留图像,但事实并非如此.我认为"正确"的事情是处理程序返回没有图像的304状态代码,对吧?如何使用IHttpHandler实现这一目标?

编辑:

根据最佳答案,我运行了此代码,它完全解决了问题.是的,它需要一些重构,但它通常会证明我追求的是什么.相关部分:

if (!String.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"]))
{
    CultureInfo provider = CultureInfo.InvariantCulture;
    var lastMod = DateTime.ParseExact(context.Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime();
    if (lastMod == photo.SubmitDate)
    {
        context.Response.StatusCode = 304;
        context.Response.StatusDescription = "Not Modified";
        return;
    }
}
byte[] imageData …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net ihttphandler

21
推荐指数
3
解决办法
1万
查看次数

IIS 7,HttpHandler和HTTP错误500.21

在IIS 7上,我正在尝试将自定义HttpHandler用于我的ASP.NET Web应用程序.我使用管道模式"经典",.NET版本是4.0.30319,我的处理程序的web.config配置是:

<system.webServer>
<handlers>
    <add name="MyHandler" path="*.myExtension" verb="*" type="Company.App.UI.Controls.MyHandler, Company.App.UI" resourceType="Unspecified" />
</handlers>
</system.webServer> 
Run Code Online (Sandbox Code Playgroud)

当我调用此处理程序时,我收到此错误:

HTTP Error 500.21 - Internal Server Error
Handler "MyHandler" has a bad module "ManagedPipelineHandler" in its module list
Run Code Online (Sandbox Code Playgroud)

我做了谷歌搜索时,大多数人通过重新注册ASP.NET通过ASPNET_REGIIS.EXE/i命令解决这个问题,但这不是为我工作(在命令完成后,我重新启动IIS,但同样的错误).我在两台不同的服务器上尝试过,但结果相同.

我还应该尝试什么?谢谢

asp.net iis iis-7 httphandler ihttphandler

16
推荐指数
3
解决办法
9万
查看次数

如何在web.config中添加HttpHandler?

我写了一个httphandler来处理所有XSLT请求.

处理程序的名称是XSLTHandler.cs.

web.config中

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  <httpHandlers>
    <add verb="*" path="*.xsl" type="XSLTHandler" />
  </httpHandlers>
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息,不知道如何解决它.

配置错误说明:处理为此请求提供服务所需的配置文件时发生错误.请查看下面的具体错误详细信息并相应地修改配置文件.

分析器错误消息:无法加载类型'XSLTHandler'.

asp.net web-config httphandler ihttphandler

15
推荐指数
2
解决办法
3万
查看次数