【发布时间】:2013-01-21 04:25:13
【问题描述】:
以下代码在访问对应的url时会抛出异常。 StartNew() 中的对象 state 与 ProcessRequest 中的 ctx 不同。为什么会这样?如何在StartNew() 旁边获取有效的HttpContextBase 对象?
using System.Web;
using System.Web.Routing;
namespace AsyncUseHttpContextBaseWillFail
{
public class FooHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var ctx = new HttpContextWrapper(context);
System.Threading.Tasks.Task.Factory.StartNew(state =>
{
//ArgumentException: Value does not fall within the expected range.
var ip = ((HttpContextBase)state).Request.UserHostAddress;
}, ctx);
}
public bool IsReusable
{
get { return false; }
}
}
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add(new Route(string.Empty, new FooRoute()));
}
}
public class FooRoute : IRouteHandler
{
public virtual IHttpHandler GetHttpHandler(RequestContext context)
{
return new FooHandler();
}
}
}
【问题讨论】:
-
你想达到什么目的?你可以改用 IAsyncHttpHandler 吗? msdn.microsoft.com/en-us/library/ms227433(v=vs.100).aspx
-
你能发布异常的堆栈跟踪吗?
标签: .net asp.net-mvc .net-4.0 task-parallel-library