Eu tenho um projeto que exige que meus URLs tenham pontos no caminho. Por exemplo, eu posso ter um URL como www.example.com/people/michael.phelps
URLs com o ponto geram um 404. Meu roteamento está bom. Se eu passar em michaelphelps, sem o ponto, tudo funciona. Se eu adicionar o ponto, recebo um erro 404. O site de amostra está sendo executado no Windows 7 com o IIS8 Express. O URLScan não está sendo executado.
Tentei adicionar o seguinte ao meu web.config:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Infelizmente isso não fez diferença. Acabei de receber um erro 404.0 não encontrado.
Este é um projeto MVC4, mas não acho relevante. Meu roteamento funciona bem e os parâmetros que eu espero estão lá, até que incluam um ponto.
O que preciso configurar para ter pontos no meu URL?
asp.net-mvc
iis
iis-7
iis-express
iis-8
Marca
fonte
fonte
Respostas:
Eu consegui isso editando os manipuladores HTTP do meu site. Para minhas necessidades, isso funciona bem e resolve meu problema.
Simplesmente adicionei um novo manipulador HTTP que procura por critérios de caminho específicos. Se a solicitação corresponder, ela será enviada corretamente ao .NET para processamento. Estou muito mais feliz com esta solução que o URLRewrite corta ou habilita o RAMMFAR.
Por exemplo, para o .NET processar a URL www.example.com/people/michael.phelps, adicione a seguinte linha ao web.config do seu site, dentro do
system.webServer / handlers
elemento:Editar
Há outras postagens sugerindo que a solução para esse problema é
RAMMFAR
ouRunAllManagedModulesForAllRequests
. A ativação dessa opção ativará todos os módulos gerenciados para todas as solicitações. Isso significa que os arquivos estáticos, como imagens, PDFs e tudo mais, serão processados pelo .NET quando não precisarem. É melhor deixar essas opções, a menos que você tenha um caso específico.fonte
Após algumas investigações, descobri que o relaxUrlToFileSystemMapping não funcionou para mim, o que funcionou no meu caso foi definir RAMMFAR como true, o mesmo vale para (.net 4.0 + mvc3) e (.net 4.5 + mvc4).
Esteja ciente de que ao definir o post verdadeiro de Hanselman sobre RAMMFAR sobre RAMMFAR e desempenho
fonte
Acredito que você precise definir a propriedade relaxingUrlToFileSystemMapping no seu web.config. Haack escreveu um artigo sobre isso há pouco tempo (e existem outros posts de SO que fazem os mesmos tipos de pergunta)
Editar Nos comentários abaixo, as versões posteriores do .NET / IIS podem exigir que isso esteja no
system.WebServer
elementofonte
Fiquei muito tempo preso a esse problema, seguindo todos os remédios diferentes sem sucesso.
Percebi que, ao adicionar uma barra [/] ao final da URL que continha os pontos [.], Não ocorreu um erro 404 e realmente funcionou.
Finalmente, resolvi o problema usando um reescritor de URLs como o IIS URL Rewrite para observar um padrão específico e anexar a barra de treinamento.
Meu URL fica assim: /Contact/~firstname.lastname, portanto, meu padrão é simplesmente: /Contact/~(.*[^/})$
Eu peguei essa ideia de Scott Forsyth, veja o link abaixo: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
fonte
Basta adicionar esta seção ao Web.config, e todas as solicitações à rota / {* pathInfo} serão tratadas pelo manipulador especificado, mesmo quando houver pontos no pathInfo. (extraído do exemplo do ServiceStack MVC Host Web.config e desta resposta https://stackoverflow.com/a/12151501/801189 )
Isso deve funcionar para o IIS 6 e 7. Você pode atribuir manipuladores específicos a caminhos diferentes após a 'rota', modificando path = "*" nos elementos 'add'
fonte
Solução alternativa do MVC 5.0.
Muitas das respostas sugeridas não parecem funcionar no MVC 5.0.
Como o problema de 404 pontos na última seção pode ser resolvido fechando-a com uma barra, aqui está o pequeno truque que eu uso, limpo e simples.
Mantendo um espaço reservado conveniente em sua exibição:
adicione um pouco de jquery / javascript para fazer o trabalho:
observe a barra à direita, responsável pela alteração
para dentro
fonte
Resposta super fácil para aqueles que só têm isso em uma página da web. Edite seu link de ação e um + "/" no final dele.
fonte
Você pode pensar em usar traços em vez de pontos.
No Pro ASP MVC 3 Framework, eles sugerem isso sobre como criar URLs amigáveis:
Ele também menciona que os URLs devem ser fáceis de ler e alterar para humanos. Talvez um motivo para pensar em usar um traço em vez de um ponto também venha do mesmo livro:
Portanto, embora um período ainda seja legível para seres humanos (embora seja menos legível que traços, IMO), ele ainda pode ser um pouco confuso / enganoso, dependendo do que ocorrer após o período. E se alguém tiver um sobrenome zip? Em seguida, o URL será /John.zip em vez de / John-zip, algo que pode ser enganoso até para o desenvolvedor que escreveu o aplicativo.
fonte
.
) com traços em seus urls usuário: PDependendo da importância de manter seu URI sem as cadeias de consulta, você também pode passar o valor com pontos como parte da cadeia de consultas, não o URI.
Por exemplo, www.example.com/people?name=michael.phelps funcionará, sem precisar alterar nenhuma configuração ou qualquer coisa.
Você perde a elegância de ter um URI limpo, mas esta solução não requer alteração ou adição de configurações ou manipuladores.
fonte
Seria possível alterar sua estrutura de URL?
Para o que eu estava trabalhando, tentei uma rota para
mas falhou com qualquer coisa que tivesse um. iniciar.
Mudei a rota para
Agora eu posso colocar
localhost:xxxxx/File1.doc/Download
e funciona bem.Meus ajudantes na visualização também perceberam
que faz um link para o
localhost:xxxxx/File1.doc/Download
formato também.Talvez você possa colocar uma palavra desnecessária como "/ view" ou ação no final do seu percurso para que sua propriedade possa terminar com
/
algo à direita como/mike.smith/view
fonte
É tão simples quanto mudar de caminho = " ." para o caminho = " ". Basta remover o ponto no caminho para ExensionlessUrlHandler-Integrated-4.0 em web.config.
Aqui está um bom artigo https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
fonte
Tentei todas as soluções acima, mas nenhuma delas funcionou para mim. O que funcionou foi desinstalar as versões .NET> 4.5, incluindo todas as suas versões multilíngues; Eventualmente, adicionei versões mais recentes (somente em inglês), peça por peça. No momento, as versões instaladas no meu sistema são:
E ainda está trabalhando neste momento. Tenho medo de instalar o 4.6.2, pois pode atrapalhar tudo.
Então, eu só podia especular que 4.6.2 ou todas as versões que não estavam em inglês estavam atrapalhando minha configuração.
fonte
Consegui resolver minha versão específica desse problema (tive que fazer /customer.html direcionar para / customer, não são permitidas barras), usando a solução em https://stackoverflow.com/a/13082446/1454265 e substituindo o caminho = "*. html".
fonte
Como solução, pode-se considerar também a codificação para um formato que não contém símbolo
.
, como base64.Em js deve ser adicionado
No controlador
fonte
Adicione a regra de reconfiguração de URL ao arquivo Web.config. Você precisa ter o módulo de reconfiguração de URL já instalado no IIS. Use a seguinte regra de reescrita como inspiração para você.
fonte
Além disso, verifique a ordem dos seus mapeamentos de manipulador. Tivemos um .ashx com um .svc (por exemplo, /foo.asmx/bar.svc/path) no caminho a seguir. O mapeamento .svc foi o primeiro, 404, para o caminho .svc que correspondia antes do .asmx. Ainda não pensei muito, mas talvez a URL que codifique o caminho resolva isso.
fonte
fonte