Comment utiliser Url.Action () dans un fichier de classe du projet MVC?
Comme:
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"));
}
}
}
}
Vous devrez créer manuellement la classe UrlHelper
et transmettre la RequestContext
appropriée. Cela pourrait être fait avec quelque chose comme:
var requestContext = HttpContext.Current.Request.RequestContext;
new UrlHelper(requestContext).Action("MainPage", "Index");
Cependant, vous essayez de réaliser une redirection basée sur l'authentification. Je vous suggère de mettre en œuvre un filtre personnalisé AuthorizeAttribute
pour obtenir ce type de comportement afin de mieux correspondre au cadre
Transmettez la RequestContext
à votre classe personnalisée à partir du contrôleur. Je voudrais ajouter un constructeur à votre classe personnalisée pour gérer cela.
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;
}
}
Vous devez importer l'espace de noms System.Web.Mvc
dans cette classe pour pouvoir utiliser la classe UrlHelper.
Maintenant, dans votre contrôleur, créez un objet de MyCustomClass
et transmettez le contexte du contrôleur dans le constructeur,
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();
J'ai essayé d'utiliser la réponse de @ simion et j'obtenais un type invalide dans le constructeur de UrlHelper. "impossible de convertir System.Web.Routing.RequestContext en System.Net.Http.HttpRequestMessage"
Alors j'ai utilisé ça
var urlHelper = new System.Web.Mvc.UrlHelper(HttpContext.Current.Request.RequestContext);
string url = urlHelper.Action("MainPage", "Index");
travaillé pour moi.