代码之家  ›  专栏  ›  技术社区  ›  Chris

ASP.NETMVC-HttpRequestWrapper.Url是否为空?

  •  2
  • Chris  · 技术社区  · 14 年前

    var relImagePath = controllerContext.HttpContext.Response.ApplyAppPathModifier("~/Emails/Images");
    var absImagePath = new Uri(controllerContext.HttpContext.Request.Url, relImagePath).AbsoluteUri;
    

    3 回复  |  直到 14 年前
        1
  •  0
  •   Darin Dimitrov    14 年前

    HttpContext可能并不总是可以在线程中访问。您需要将所需的信息传递给线程:

    var relImagePath = controllerContext.HttpContext.Response.ApplyAppPathModifier("~/Emails/Images");
    var absImagePath = new Uri(controllerContext.HttpContext.Request.Url, relImagePath).AbsoluteUri;
    new Thread(state => 
    {  
        var imagePath = (string)state;
        // TODO ...
    }).Start(absImagePath);
    

    或者,如果您正在使用线程池(仅适用于短期运行的任务):

    ThreadPool.QueueUserWorkItem(state => 
    {  
        var imagePath = (string)state;
        // TODO ...
    }, absImagePath);
    
        2
  •  0
  •   queen3    14 年前

    我假设RequestContext在调用时获取当前的HttpContextcontrollerContext.HttpContext(因为它向RequestContext请求HttpContext),我想它可能只是请求HttpContext.当前,这就是为什么得到null。

    试着抓住controllerContext.HttpContext在ASP.NET线程,保存它并传递到您自己的线程,而不是稍后在错误时间请求HttpContext的控制器上下文。

    那是我的猜测。

    也, http://csharpfeeds.com/post/5415/Dont_use_the_ThreadPool_in_ASP.NET.aspx

        3
  •  0
  •   James Quox    11 年前

    protected new UrlHelper Url
            {
                get { return base.Url ?? (base.Url = new UrlHelper(ControllerContext.RequestContext)); }
                set { base.Url = value; }
            }