ASP.NET MVC em um diretório virtual
-
06-07-2019 - |
Pergunta
Eu tenho o seguinte no meu Global.asax.cs
routes.MapRoute(
"Arrival",
"{partnerID}",
new { controller = "Search", action = "Index", partnerID="1000" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
Meu SearchController parece com isso
public class SearchController : Controller
{
// Display search results
public ActionResult Index(int partnerID)
{
ViewData["partnerID"] = partnerID;
return View();
}
}
e index.aspx simplesmente mostra ViewData [ "PARTNERID"] no momento.
Eu tenho um diretório virtual configurado no IIS no Windows XP chamada de teste.
Se eu aponto meu navegador em http: // localhost / Teste / então eu recebo mil exibido como esperado. No entanto, se eu tentar http: // localhost / teste / 1000 eu recebo uma página não encontrada erro. Alguma idéia?
Há considerações especiais para a execução de MVC em um diretório virtual?
Solução
O IIS 5.1 interpreta o seu url tal que a sua procura de uma pasta chamada 1000 sob a pasta com o nome de teste. Por que é assim?
Isto acontece porque só IIS 6 invoca ASP.NET quando se vê um “Extensão de arquivo” na URL que de mapeado para Aspnet_isapi.dll (que é um C / C ++ filtro ISAPI responsável pela invocação ASP.NET). Desde roteamento é uma .NET IHttpModule chamada UrlRoutingModule, ele não fica invocada a menos que em si ASP.NET recebe invocada, o que só acontece quando aspnet_isapi.dll é invocado, o que só acontece quando há um .aspx no o URL. Então, não aspx, não UrlRoutingModule, daí a 404.
A solução mais fácil é:
Se você não se importa de ter aspx na sua URLs, basta ir através de seu encaminhamento configuração, acrescentando aspx antes de um frente-barra em cada padrão. Para exemplo, uso {Controller} aspx / {ação} / {id} ou myapp.aspx / {controller} / {ação} / {id}. Não coloque .aspx dentro do nomes de parâmetro encaracolado-suporte, ou em os valores ‘default’, porque não é realmente parte do nome do controlador - é apenas na URL para satisfazer IIS.
Fonte: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
Outras dicas
Se você está fazendo isso no Windows XP, então você estiver usando o IIS 5.1. Você precisa obter ASP.Net para lidar com o seu pedido. Você precisa adicionar qualquer uma extensão para suas rotas ({controller} .mvc / {ação} / {id}) e mapear essa extensão para ASP.Net ou mapear todas as solicitações para ASP.Net. A http:. // localhost / test funciona porque ele vai para Default.aspx que é tratado especialmente em projetos MVC
Além disso, você precisa especificar http: // localhost / Teste / Pesquisa / Index / 1000 . As peças de controlador e ação não são opcionais se você quiser especificar um ID.
Há uma série de considerações ao usar diretórios virtuais na sua aplicação.
Um deles é particular é que a maioria dos navegadores não apresentará biscoitos que veio de um diretório virtual para outro, mesmo que os aplicativos residem no mesmo servidor.
Tente definir o caminho virtual: clique direito sobre projeto MVC, propriedades, guia web, não entra local apropriado
.