Como posso determinar rapidamente qual é o URL raiz do meu aplicativo ASP.NET MVC? Ou seja, se o IIS estiver configurado para atender meu aplicativo em http://example.com/foo/bar , eu gostaria de obter esse URL de uma maneira confiável, que não envolva a obtenção do URL atual do solicitar e desmembrá-lo de alguma maneira frágil que quebre se eu redirecionar minha ação.
O motivo pelo qual eu preciso da URL base é que esse aplicativo Web chama outro que precisa da raiz do aplicativo Web chamador para fins de retorno de chamada.
.net
asp.net
asp.net-mvc
iis
Benjamin Pollack
fonte
fonte
urlHelper.Content("~")
? Como crio defineurlHelper
? Obrigado!var request = HttpContext.Current.Request; urlBase = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, (new System.Web.Mvc.UrlHelper(request.RequestContext)).Content("~"));
ControllerContext.RequestContext.HttpContext.Request
@Url.Content("~")
resolve para"/"
, que não é o URL base.Portanto, nenhum dos listados aqui funcionou para mim, mas usando algumas das respostas, obtive algo funcionando:
Atualização para o ASP.NET Core / MVC 6:
ASP.NET Core
torna esse processo um pouco mais doloroso, especialmente se você está profundamente envolvido no seu código. Você tem 2 opções para chegar aoHttpContext
1) Passe do seu
controller
:então em
model
:2) Talvez a maneira mais limpa seja injetá-lo na sua turma, que começa com o registro dos tipos no seu
Startup:
injete-o assim:
nos dois casos, eis a atualização para
.NET Core
GetBaseUrl()
:fonte
Helpers
na base do meu aplicativo, eu tenho umastatic
classe chamadaStatics
e coloco funções como as anteriores lá ... apenas certifique-se de alterar aspublic string GetBaseUrl()
public static string GetBaseUrl()
Statics
, em vez eu tê-lo separado em mais usos específicos, por isso, neste caso, isso seria ir para a minhaUrlHelper
classeEm código:
Sintaxe do MVC3 Razor:
fonte
/
vez do nome real.Url
disponível para o ajudante logo de cara? Talvez apenas noController
. Certamente não noViewModel
ou qualquer outroclass
onde você pode precisar isso ..Talvez seja extensão ou modificação das respostas postadas aqui, mas eu uso simplesmente a seguinte linha e funciona:
Quando meu caminho é:
http://host/iis_foldername/controller/action
então eu recebo:
http://host/iis_foldername/
fonte
O seguinte snippet funciona muito bem para mim no MVC4 e não precisa de um
HttpContext
disponível:fonte
jQuery.load()
para construir a URL para o controlador e a ação que desejo chamar:$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
O truque para confiar no IIS é que as ligações do IIS podem ser diferentes dos seus URLs públicos (WCF, estou olhando para você), especialmente com máquinas de produção com hospedagem múltipla. Eu costumo usar vetor de configuração para definir explicitamente o URL "base" para fins externos, pois isso tende a ser um pouco mais bem-sucedido do que extraí-lo do objeto Request.
fonte
Para um URL base absoluto, use isso. Funciona com HTTP e HTTPS.
fonte
Esta é uma conversão de uma propriedade asp.net para MVC . É um método praticamente todo de cantar e dançar.
Declare uma classe auxiliar:
Uso:
Para usar de um controlador:
Para usar em uma exibição:
fonte
No MVC _Layout.cshtml:
É isso que usamos!
fonte
<base>
. Além disso, você pode omitir o esquema para que ele funcione com http ou https. Isso significa que você pode iniciar o URL//
.Isso funciona bem para mim (também com um balanceador de carga):
Especialmente se você estiver usando números de porta não padrão, usar Request.Url.Authority parecerá um bom lead no início, mas falhará em um ambiente LB.
fonte
Você pode ter um método estático que analise HttpContext.Current e decida qual URL usar (servidor de desenvolvimento ou ativo), dependendo do ID do host. O HttpContext pode até oferecer uma maneira mais fácil de fazer isso, mas esta é a primeira opção que encontrei e funciona bem.
fonte
Você pode usar o seguinte script na exibição:
fonte
Para o ASP.NET MVC 4, é um pouco diferente:
fonte
Isso está funcionando no ASP .NET MVC 4 Em qualquer ação do controlador, você pode escrever: 1stline obtém o URL inteiro + Query String. 2a linha remover caminho local e consulta, último símbolo '/'. Terceira linha, adicione o símbolo '/' na última posição.
fonte
em html simples e ASP.NET ou ASP.NET MVC, se você estiver usando a tag:
fonte
Para URLs com alias de aplicação como http://example.com/appAlias/ ... Você pode tentar o seguinte:
fonte
Na própria página da web:
No javascript:
Isso funciona para o meu projeto MVC, espero que ajude
fonte
Coloquei isso na cabeça do meu _Layout.cshtml
fonte
Talvez seja uma solução melhor.
usando
fonte
Para MVC 4:
fonte
O seguinte funcionou solidamente para mim
fonte
--output http: // localhost: 49626 / TEST /
fonte
Esta foi a minha solução (usando o .net core 3.1, em um controlador api):
fonte
Simplesmente em uma linha, obtenha o BaseUrl
fonte
Também você pode usar isso. Para as páginas de barbear, é melhor usá-lo do que os outros.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files
fonte
adicione esta função na classe estática no projeto como classe de utilitário:
conteúdo utility.cs :
use este código em qualquer lugar e divirta-se:
fonte