- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 IHttpAsyncHandler 在请求管道中注入(inject)解码过滤器,但我发现 Request.Filter 属性被忽略了。
有人成功地将 Request.Filter 与 IHttpAsyncHandler 一起使用了吗?
public class DecodeHttpHandler : IHttpAsyncHandler {
public void ProcessRequest(HttpContext context) {
context.Request.Filter = new DecodeStream(context.Request.Filter);
}
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) {
var decodeContext = new DecodeContext(context);
var w = new HttpContextWrapper(context);
w.Request.Filter = new DecodeStream(w.Request.Filter);
return RequestHandler.BeginProcessRequestBase(w, cb, extraData);
}
public void EndProcessRequest(IAsyncResult result){
RequestHandler.EndProcessRequestBase(result);
}
public bool IsReusable {
get {
return true;
}
}
}
public class DecodeStream : Stream {
... details ...
public override int Read(byte[] buffer, int offset, int count) {
// never gets here
int c = _sink.Read(buffer, offset, count);
return c;
}
}
编辑:我找到了另一种不涉及 Request.Filter 的好方法,粘贴在下面。然而,令人费解的是 Request.Filter 根本不起作用。仅供引用,我的用例是在调用第 3 方 RequestHandler 之前进行 URL 解码。
public class UrlDecodeHttpHandler : IHttpAsyncHandler {
public void ProcessRequest(HttpContext context) {
throw new NotImplementedException();
}
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) {
var decodeContext = new DecodeContext(context);
return RequestHandler.BeginProcessRequestBase(decodeContext, cb, extraData);
}
public void EndProcessRequest(IAsyncResult result){
RequestHandler.EndProcessRequestBase(result);
}
public bool IsReusable {
get {
return false;
}
}
}
public class DecodeContext : HttpContextWrapper {
private readonly HttpContext _context;
public DecodeContext(HttpContext httpContext) : base(httpContext){
_context = httpContext;
}
public override HttpRequestBase Request {
get { return new DecodeRequest(_context.Request); }
}
}
public class DecodeRequest : HttpRequestWrapper {
public DecodeRequest(HttpRequest request) : base(request) {}
public override Stream InputStream {
get {
string result;
using (var sr = new StreamReader(base.InputStream)) {
result = HttpUtility.UrlDecode(sr.ReadToEnd());
}
return GenerateStreamFromString(result);
}
}
private static Stream GenerateStreamFromString(string s) {
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
}
最佳答案
在 httphandler 中有很多东西是你不能改变的,因为已经太晚了。您可以尝试在其中放置一个 HTTPModule 进行拦截,看看是否有帮助。请注意,如果我有时间在家,我还没有尝试过这个。
关于c# - IHttpAsyncHandler 和 Request.Filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574769/
我正在尝试设置一个异步 HttpHandler,但我不知道我是否在正确的轨道上。似乎没有太多关于它的文档。我只想获取异步触发 DoWork() 方法的请求。 一些我不确定的事情: using Syst
我注意到 .NET IHttpAsyncHandler(和 IHttpHandler,在较小程度上)在受到并发 Web 请求时会泄漏内存。 在我的测试中,Visual Studio Web 服务器 (
我正在使用 IHttpHandler 调用 Web 服务并将生成的 byte[] 作为下载的文件附件返回给客户端。这工作正常,但是当我尝试将 IHttpHandler 更改为 IHttpAsyncHa
我尝试在 web.config 文件中设置executionTimeout: 查看 IIS 管理器请求页面,我可以看到请求在 30 秒后没有被终止。 我应该在 IHttpAsyncHandler
我尝试使用 IHttpAsyncHandler 在请求管道中注入(inject)解码过滤器,但我发现 Request.Filter 属性被忽略了。 有人成功地将 Request.Filter 与 IH
我已经通过 IHttpAsyncHandler 使用 .Net 异步编程模型在 C# 中实现了异步 http 请求处理。 我是 java 的新手,但想完成相同的目的——开始一个请求,让它交出请求处理线
在异步处理程序中,我从 webrequest 创建了一个 IObservable,它返回一个重定向字符串。 我正在订阅那个可观察对象并调用 AsyncResult.CompleteCall() 但我不
这是基本设置。我们有一个 ASP.Net WebForms 应用程序,其页面包含一个需要访问外部 Web 服务的 Flash 应用程序。由于(我推测的安全性)Flash 的限制(别问我,我根本不是 F
我制作了一个派生自 MvcHandler 的自定义处理程序。我的路由使用自定义 RouteHandler,它返回 GetHttpHandler() 的新处理程序,并且我在自定义处理程序中重写 Proc
我正在开发一个基于 Martin Fowler (link) 模式的 HTTP 前端 Controller 。就我而言, Controller 具有以下职责:- 解码封装数据- 授权请求- 记录- 将
我在我的类(class)中实现了 IHttpAsyncHandler 以在后台执行 5-6 个长时间运行的进程,并在每个任务开始时向客户端确认。 早些时候我使用一个 session 变量并用任务的当前
Java 世界中的 ASP.NET IHttpAsyncHandler 等价物是什么? 最佳答案 查看最新 Servlet 规范 (3.0) 中的异步支持:http://blogs.oracle.co
自从开始编写 ASP.NET 应用程序时,当我想添加线程时,我可以通过 3 种简单的方法在 ASP.NET 应用程序中完成线程: 使用System.Threading.ThreadPool。 使用自定
在此 question & answer ,我找到了一种让 ASP.NET MVC 支持异步处理的方法。但是,我无法让它发挥作用。 基本上,这个想法是创建一个新的 IRouteHandler 实现,它
我在使用实现 IHttpAsyncHandler 的通用处理程序时遇到了一些性能问题。最简单的是,处理程序接收 GET 请求,并在 20 秒后将“”写入响应后结束响应。 当使用 10000-20000
我是一名优秀的程序员,十分优秀!