Preciso gerar alguns URLs em um modelo no ASP.NET MVC. Gostaria de chamar algo como UrlHelper.Action (), que usa as rotas para gerar a URL. Não me importo de preencher os espaços em branco habituais, como nome do host, esquema e assim por diante.
Existe algum método que eu possa chamar para isso? Existe uma maneira de construir um UrlHelper?
asp.net-mvc
urlhelper
pupeno
fonte
fonte
Respostas:
Dica útil: em qualquer aplicativo ASP.NET, você pode obter uma referência do HttpContext atual
que é derivado de System.Web. Portanto, o seguinte funcionará em qualquer lugar de um aplicativo ASP.NET MVC:
Exemplo:
Chamar a
Link
propriedade em um objeto MyModel criado retornará o URL válido para exibir o Modelo com base no roteamento em Global.asaxfonte
using
para ambosSystem.Web
eSystem.Web.Mvc
Gosto da resposta de Omar, mas isso não está funcionando para mim. Apenas para constar, esta é a solução que estou usando agora:
fonte
Um UrlHelper pode ser construído a partir de uma ação do Controller com o seguinte:
Fora de um controlador, um UrlHelper pode ser criado criando um RequestContext a partir de RouteTable.Routes RouteData.
(Com base na resposta de Brian, com uma pequena correção de código adicionada.)
fonte
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
this.ControllerContext.RequestContext
é aHttpRequestContext
, e construtor deUrlHelper
espera aRequestContext
. Ambas as classes não são relacionadas.Sim, você pode instanciar. Você pode fazer algo como:
RouteTable.Routes
é uma propriedade estática, então você deve estar bem lá; para obter umaHttpContextBase
referência,HttpContextWrapper
leva uma referênciaHttpContext
eHttpContext
entrega isso.fonte
Depois de tentar todas as outras respostas, acabei com
Aborrecedores odeiam ¯ \ _ (ツ) _ / ¯
fonte
Eu estava tentando fazer algo semelhante dentro de uma página (fora de um controlador).
O UrlHelper não me permitiu construí-lo tão facilmente quanto a resposta do Pablos, mas lembrei-me de um velho truque para efetivamente fazer a mesma coisa:
fonte
Eu acho que o que você está procurando é o seguinte:
fonte