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

如何访问控制器外部的RequestContext?

  •  19
  • nfplee  · 技术社区  · 14 年前

    背景

    我正在尝试将业务逻辑从控制器转移到它们自己的服务中。

    控制器

    public class AccountController : Controller
    {
        private readonly IAccountService _accountService; 
    
        public AccountController(IAccountService accountService)
        {
            _accountService = accountService;
        }
    
        ....
    }
    

    我用Unity注入依赖项。我想使用 Url.GenerateUrl() 实现中的helper方法 IAccountService 但是 Url

    我查看了MVC源代码以了解如何做到这一点,但它要求我访问 RequestContext

    如何从控制器外部访问RequestContext?如果这不能解决我的问题,我该如何解决我的设置问题?

    2 回复  |  直到 4 年前
        1
  •  18
  •   Darin Dimitrov    14 年前

    但是我想用网址:GenerateUrlIAccountService实现中的helper方法

    只需将此信息作为参数传递即可。例子:

    public ActionResult Index()
    {
        var someUrl = Url.Action("about");
        _accountService.Foo(someUrl);
    }
    

    现在,在服务类中不再需要UrlHelper。所有需要与MVC基础设施交互的东西都不应该放在服务类中。他们不应该依赖于任何请求、响应、会话。。。控制器负责处理这些对象并将它们与服务类粘合在一起。

        2
  •  44
  •   Justin Morgan    12 年前

    using System.Web;
    using System.Web.Mvc;
    
    // ...
    
    var helper = new UrlHelper(HttpContext.Current.Request.RequestContext);
    string url = helper.GenerateUrl(/* ... */);
    

    将上下文从控制器传递到 IAccountService HttpContext.Current .

    推荐文章