obtener net mvc from current content asp c# asp.net-mvc url.action

net - url content c#



¿Cómo usar Url.Action() en un archivo de clase? (4)

¿Cómo puedo usar Url.Action () en un archivo de clase del proyecto MVC?

Me gusta:

namespace _3harf { public class myFunction { public static void CheckUserAdminPanelPermissionToAccess() { if (ReferenceEquals(HttpContext.Current.Session["Loged"], "true") && myFunction.GetPermission.AdminPermissionToLoginAdminPanel( Convert.ToInt32(HttpContext.Current.Session["UID"]))) { HttpContext.Current.Response.Redirect(Url.Action("MainPage", "Index")); } } } }


Intenté usar la respuesta de @ simion y obtuve un tipo no válido en el constructor para UrlHelper. "no se puede convertir de System.Web.Routing.RequestContext a System.Net.Http.HttpRequestMessage"

Así que usé esto

var urlHelper = new System.Web.Mvc.UrlHelper(HttpContext.Current.Request.RequestContext); string url = urlHelper.Action("MainPage", "Index");

funcionó para mí


La respuesta de @Simon Belanger funciona perfectamente, pero UrlHelper.Action() genera URL relativas y, en mi caso, necesito la URL absoluta completamente calificada. Entonces, lo que UrlHelper.Action() hacer es: tengo que usar una de las sobrecargas provistas por el método UrlHelper.Action() .

var requestContext = HttpContext.Current.Request.RequestContext; string link = new UrlHelper(requestContext).Action("Index", "Home", null, HttpContext.Current.Request.Url.Scheme);

Así que digamos si su aplicación alojada en " https://myexamplesite.com " entonces el código anterior le dará una url completa como esta: " https://myexamplesite.com/Home/Index ". Espero que esta respuesta ayude a los lectores que encontrarán este enlace.


Necesitará crear manualmente la clase UrlHelper y pasar el RequestContext apropiado. Se podría hacer con algo como:

var requestContext = HttpContext.Current.Request.RequestContext; new UrlHelper(requestContext).Action("MainPage", "Index");

Sin embargo, está intentando lograr una redirección basada en la autenticación. Le sugiero que mire la implementación de un filtro AuthorizeAttribute personalizado para lograr que este tipo de comportamiento esté más en línea con el marco


Pase el RequestContext a su clase personalizada desde el controlador. Yo agregaría un Constructor a su clase personalizada para manejar esto.

using System.Web.Mvc; public class MyCustomClass { private UrlHelper _urlHelper; public MyCustomClass(UrlHelper urlHelper) { _urlHelper = urlHelper; } public string GetThatURL() { string url=_urlHelper.Action("Index", "Invoices"); //do something with url or return it return url; } }

Debe importar el espacio de nombres System.Web.Mvc a esta clase para usar la clase UrlHelper.

Ahora en su controlador, cree un objeto de MyCustomClass y pase el contexto del controlador en el constructor,

UrlHelper uHelp = new UrlHelper(this.ControllerContext.RequestContext); var myCustom= new MyCustomClass(uHelp ); //Now call the method to get the Paging markup. string thatUrl= myCustom.GetThatURL();