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?

Foi útil?

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

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top