web-dev-qa-db-fra.com

Comment utiliser Url.Action () dans un fichier de classe?

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"));
            }
        }
    }
}
17
Erçin Dedeoğlu

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

32
Simon Belanger

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();
4
Shyju

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.

0
domshyra