我有一个http处理程序,已注册并正常工作。现在我想处理一个请求,并发送一个自定义的html响应,然后显示在客户端上。
所以我的函数编写如下:
public void ProcessRequest(HttpContext _context)
{
HttpResponse response = _context.Response;
response.Clear();
var requestedUrl = _context.Request.Url;
PhantomModuleController pmc = new PhantomModuleController();
response.BufferOutput = true;
var snapshot = pmc.DoThings(requestedUrl); //this returns a string
response.Write(snapshot); //i put it in the response
response.ContentType = "text/html";
response.End(); //it should send it to the client now
}
但根据我的小提琴手的说法,回应永远不会到达客户端。事实上,httpresponse甚至从未发送过。
我忘记了一些事吗
答案 0 :(得分:1)
由于请求未在Fiddler中显示为发送回客户端(也不会将错误发送回客户端),因此路由引擎可能会妨碍请求。该场景由phil hack描述。
但是,在其他情况下,您可能会收到文件请求 在磁盘上不存在。例如,如果您注册HTTP处理程序 直接到实现IHttpHandler的类型。更何况 浏览器自动生成的favicon.ico请求。 ASP.NET 路由尝试将这些请求路由到控制器。一个解决方案 这是为了添加一个适当的忽略路由来指示路由 应该忽略这些要求。不幸的是,我们做不了什么 像这样:{* path} .aspx / {* pathinfo}
您需要设置路由引擎以忽略具有文件扩展名的路由。 E.G。
routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});