Я должен генерировать некоторые URL в модели в ASP.NET MVC. Я хотел бы назвать что-то как UrlHelper. Действие (), который использует маршруты для генерации URL. Я не возражаю заполнять обычные пробелы, как имя узла, схема и так далее.
Есть ли какой-либо метод, я могу призвать к этому? Существует ли способ создать UrlHelper?
] Мне нравится ответ Омара, но это не работает на меня. Просто для записи это решение, которое я сейчас использую:[
] [var httpContext = HttpContext.Current;
if (httpContext == null) {
var request = new HttpRequest("/", "http://example.com", "");
var response = new HttpResponse(new StringWriter());
httpContext = new HttpContext(request, response);
}
var httpContextBase = new HttpContextWrapper(httpContext);
var routeData = new RouteData();
var requestContext = new RequestContext(httpContextBase, routeData);
return new UrlHelper(requestContext);
] ]Полезный совет, в любом приложении ASP.NET можно получить ссылку на текущий HttpContext[
] [HttpContext.Current
]
[], который является производным от System.Web. Таким образом, в любом приложении ASP.NET MVC будет работать следующее:[
] [UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
url.Action("ContactUs"); // Will output the proper link according to routing info
]
[]Пример:[
] [public class MyModel
{
public int ID { get; private set; }
public string Link
{
get
{
UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
return url.Action("ViewAction", "MyModelController", new { id = this.ID });
}
}
public MyModel(int id)
{
this.ID = id;
}
}
]
[]Вызов свойства []Link[
] на созданном объекте MyModel вернет действительный Url для просмотра модели, основанной на маршрутизации в Global.asax[
]Да, его можно инстанцировать. Вы можете сделать что-то вроде:[
] [var ctx = new HttpContextWrapper(HttpContext.Current);
UrlHelper helper = new UrlHelper(
new RequestContext(ctx,
RouteTable.Routes.GetRouteData(ctx));
]
[][]RouteTable.Routes[
] является статическим свойством, поэтому вы должны быть в порядке; чтобы получить ссылку на []HttpContextBase[
], []HttpContextWrapper[
] берет ссылку на []HttpContext[
], и []HttpContext[
] доставляет эту ссылку.[
UrlHelper может быть создан из действия контроллера с помощью следующих действий:
var url = new UrlHelper(this.ControllerContext.RequestContext);
url.Action(...);
Вне контроллера UrlHelper может быть создан путем создания RequestContext из RouteTable.Routes RouteData.
HttpContextWrapper httpContextWrapper = new HttpContextWrapper(System.Web.HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(new RequestContext(httpContextWrapper, RouteTable.Routes.GetRouteData(httpContextWrapper)));
(На основе ответа Брайана с добавлением незначительной коррекции кода.)
Я думаю, что вы ищете, так это:
Url.Action("ActionName", "ControllerName");