Как использовать Url.Action() в файле класса?
Как я могу использовать Url.Action() в файле класса проекта MVC?
Как
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"));
}
}
}
}
Ответы
Ответ 1
Вам нужно будет вручную создать класс UrlHelper
и передать соответствующий RequestContext
. Это может быть сделано с чем-то вроде:
var requestContext = HttpContext.Current.Request.RequestContext;
new UrlHelper(requestContext).Action("Index", "MainPage");
Однако вы пытаетесь добиться перенаправления на основе аутентификации. Я предлагаю вам взглянуть на реализацию пользовательского фильтра AuthorizeAttribute
чтобы добиться такого поведения, чтобы оно больше соответствовало инфраструктуре
Ответ 2
Передайте RequestContext
в свой пользовательский класс из контроллера. Я бы добавил конструктор в свой собственный класс, чтобы справиться с этим.
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;
}
}
Вам нужно импортировать пространство имен System.Web.Mvc
в этот класс, чтобы использовать класс UrlHelper.
Теперь в вашем контроллере создайте объект MyCustomClass
и передайте контекст контроллера в конструкторе,
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();
Ответ 3
Ответ @Simon Belanger отлично работает, но UrlHelper.Action()
генерирует относительные URL, и в моем случае мне нужен полностью определенный абсолютный URL. Так что мне нужно сделать - я должен использовать одну из перегрузок, предоставляемых методом UrlHelper.Action().
var requestContext = HttpContext.Current.Request.RequestContext;
string link = new UrlHelper(requestContext).Action("Index", "Home", null, HttpContext.Current.Request.Url.Scheme);
Допустим, если ваше приложение размещено на " https://myexamplesite.com ", то приведенный выше код даст вам полный URL-адрес, например: " https://myexamplesite.com/Home/Index ". Надеюсь, этот ответ поможет тем читателям, которые попадут по этой ссылке.
Ответ 4
Я попытался использовать ответ @simion, и я получил неверный тип в конструкторе для UrlHelper. "невозможно преобразовать из System.Web.Routing.RequestContext в System.Net.Http.HttpRequestMessage"
Так что я использовал это
var urlHelper = new System.Web.Mvc.UrlHelper(HttpContext.Current.Request.RequestContext); string url = urlHelper.Action("MainPage", "Index");
сработало для меня.