tag net mvc headers for enable control asp allow asp.net-mvc dependency-injection urlhelper requestcontext

asp.net-mvc - net - enable cors mvc 5



¿Cómo accedo al RequestContext fuera del controlador? (2)

Sin embargo, me gustaría usar los métodos de ayuda Url.GenerateUrl en mi implementación de IAccountService

Simplemente pase esta información como parámetro. Ejemplo:

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

Ahora ya no necesita UrlHelper dentro de sus clases de servicio. Todo lo que necesita para interactuar con la infraestructura MVC no debe colocarse en sus clases de servicio. No deben depender de ninguna Solicitud, Respuesta, Sesión, ... Es responsabilidad del controlador trabajar con esos objetos y pegarlos con sus clases de servicio.

Fondo

Estoy tratando de sacar la lógica empresarial de los controladores a sus propios servicios.

Controlador

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

Estoy usando la Unidad para inyectar dependencias. Me gustaría usar el método auxiliar Url.GenerateUrl() dentro de la implementación de IAccountService pero Url es una propiedad contra el controlador.

Miré la fuente de MVC para ver cómo se hace esto, pero requiere que acceda al RequestContext desde fuera del controlador, y no sé cómo hacerlo.

Pregunta

¿Cómo accedo al RequestContext desde fuera del controlador? Si eso no resuelve mi problema, ¿cómo resuelvo el problema dada mi configuración?


Puede que esto no sea del todo correcto porque no puedo probarlo en este momento, pero creo que puedes hacer algo como esto en .NET 4+:

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

Podría tener más sentido pasar el contexto desde el controlador a su implementación IAccountService lugar de capturarlo directamente desde HttpContext.Current .