Como configurar o web.config para permitir solicitações de qualquer tamanho

138

Estou criando um site no qual gostaria de criar um lado do cliente de arquivo a partir do valor de um elemento da área de texto.

Eu tenho o código no lugar para fazer isso, mas estou recebendo este erro

Erro HTTP 404.15 - Não encontrado O módulo de filtragem de solicitações está configurado para negar uma solicitação em que a string de consulta é muito longa.

Existe uma maneira de substituir isso para que eu possa processar solicitações de qualquer tamanho?

Caso contrário, existe uma maneira de gerar arquivos do lado do cliente sem usar o sistema de arquivos / objeto x ativo?

obrigado

some_bloody_fool
fonte
8
O que você deseja considerar é que, embora o comprimento da string de consulta possa ser configurável para o IIS ou seu aplicativo, existe um padrão HTTP para o comprimento da URL. Como você está usando uma string de consulta, está transmitindo valores como parte do URL. O tamanho máximo de caracteres do URL é de 2000 caracteres. Se seus valores forem seqüências longas, seria melhor POSTAR os valores em vez de passá-los na sequência de consultas.
22812 Jeff LaFay
2
Concordo com Jlafay. É uma prática recomendada POSTAR os valores quando você tiver mais de 2-3 parâmetros simples. e quando você usar a string de consulta, certifique-se de criptografá-las.
24413 Jack

Respostas:

243

Adicione o seguinte ao seu web.config:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxQueryString="32768"/>
    </requestFiltering>
  </security>
</system.webServer>

Vejo:

http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits

Atualizado para refletir os comentários.

Elemento requestLimits for requestFiltering [Esquema de configurações do IIS]

Pode ser necessário adicionar o seguinte no seu web.config também

<system.web>
    <httpRuntime maxQueryStringLength="32768" maxUrlLength="65536"/>
</system.web>

Consulte: Elemento httpRuntime (esquema de configurações do ASP.NET)

Obviamente, os números (32768 e 65536) nas configurações acima são apenas exemplos. Você não precisa usar esses valores exatos.

Matt Varblow
fonte
24
Isso por si só não foi suficiente para mim. Eu tive que também adicionar esta linha na seção system.web: <httpRuntime maxQueryStringLength = "8192" />
Rob Sedgwick
2
nnn é o comprimento máximo da cadeia que você gostaria de permitir, por exemplo, 32768
Matt Varblow
não está funcionando, veja este stackoverflow.com/questions/31624710/…
Jitendra Pancholi
Tentei cada um individualmente, configurando o nó de segurança em system.webServer e removendo e adicionando apenas os atributos ao nó httpRuntime. Eu definitivamente precisava dos dois para trabalhar. Muito Obrigado!
David Gunderson
2
Nota: a tag <httpRuntime> fica em <system.web> : <system.web> <httpRuntime maxQueryStringLength = "32768" maxUrlLength = "65536" /> </ system.web>
LePatay
33

No meu caso (Visual Studio 2012 / IIS Express / aplicativo ASP.NET MVC 4 / .Net Framework 4.5), o que realmente funcionou após 30 minutos de tentativa e erro foi definir a maxQueryStringLengthpropriedade na <httpRuntime>tag:

<httpRuntime targetFramework="4.5" maxQueryStringLength="10240" enable="true" />

maxQueryStringLengtho padrão é 2048.

Mais sobre isso aqui:

Expandindo o intervalo de URLs permitidos


Tentei configurá-lo <system.webServer>como o @MattVarblow sugere, mas não funcionou ... e isso é porque estou usando o IIS Express (baseado no IIS 8) na minha máquina de desenvolvimento com o Windows 8.

Quando implantei meu aplicativo no ambiente de produção (Windows Server 2008 R2 com IIS 7), o IE 10 começou a retornar erros 404 em solicitações AJAX com seqüências de caracteres longas de consulta. Então pensei que o problema estava relacionado à string de consulta e tentei a resposta de @ MattVarblow. Funcionou apenas no IIS 7. :)

Leniel Maccaferri
fonte
2
Para mim, foi o enable = "true" que fez a mágica acontecer :)
Johann Combrink
6

Outra coisa a verificar: se o seu site estiver usando MVC, isso pode acontecer se você tiver adicionado [Autorizar] à sua classe de controlador de login. Ele não pode acessar o método de login porque não está autorizado e, portanto, redireciona para o método de login -> boom.

SteveCav
fonte
Obrigado! Tive esse problema porque mudei o Menu / Navegação para uma visualização parcial e outro Controlador que não permitia conexões anônimas.
Westerlund.io
Outro caso em que a mensagem de erro, embora verdadeira, não tem relação com o problema real.
Steve Smith
1
Verifique também as propriedades do projeto, pois a autenticação do Windows está "Ativada" e a autenticação anônima está desativada ". Pls confira este artigo detalhado - Erro (Visual Studio 2013, MVC5): O módulo de filtragem de solicitação é configurado para negar um pedido em que a string de consulta é muito longa
fujiFX
5

Se você encontrar esse problema ao executar um servidor Web IIS 8.5, poderá usar o seguinte método.

Primeiro, encontre o módulo "Request Filtering" no site do IIS em que está trabalhando e clique duas vezes nele ...

insira a descrição da imagem aqui

Em seguida, clique com o botão direito do mouse na área branca mostrada abaixo e clique na opção do menu de contexto chamada "Editar configurações de recursos" .

insira a descrição da imagem aqui

A última coisa a fazer é alterar o valor "Maximum query string (Bytes)" de 2048 para algo mais apropriado, como 5000, para suas necessidades.

insira a descrição da imagem aqui

Arvo Bowen
fonte
Obrigado, esta é a solução mais simples e funcional para mim
Afif Zafri
Obrigado companheiro !!!!!
Noobie 20/07
0

Eu tive um problema semelhante ao tentar implantar um aplicativo Web ASP no IIS 8. Para corrigi-lo, fiz o que Matt e Leniel sugeriram acima. Mas também tive que definir a configuração de autenticação do meu site para ativar a autenticação anônima. E isso funcionou para mim.

Ronald Nsabiyera
fonte
0

Eu tive que adicionar [AllowAnonymous] às funções ActionResult na minha página de login porque o usuário ainda não estava autenticado.

Andrew Gale
fonte
0

Se o seu site estiver usando autenticação, mas você não tiver o método de autenticação correto configurado no IIS (por exemplo, Básico, Formulários etc.), o navegador ficará preso em um loop de redirecionamento. Isso faz com que o URL de redirecionamento fique cada vez mais longo até explodir.

Steve Smith
fonte
0

Também irá gerar erro quando você passar uma string grande no parâmetro de chamada ajax.

portanto, para esse uso sempre, digite post no ajax resolverá seu problema 100% e não será necessário definir o tamanho no web.config.

// var UserId = matriz de 1000 IDs de usuário

$ .ajax ({global: false, url: SitePath + "/ User / getAussizzMembersData", "data": {UserIds: UserId}, "type": "POST", "dataType": "JSON"}}

rinku Choudhary
fonte
-1

Erro HTTP 404.15 - Não encontrado O módulo de filtragem de solicitações está configurado para negar uma solicitação em que a string de consulta é muito longa.

Para resolver esse problema, verifique no código-fonte se a Formtag tem uma propriedade methodcomo get / set state.

Nesse caso, a methodpropriedade deve ser removida.

user3635095
fonte