O IIS 7 remove o nome do arquivo Content-Disposition para o aplicativo Content-Type / pdf

2

Eu tenho o seguinte código que retorna um arquivo PDF no meu aplicativo da Web:

string path = "help.pdf";
byte[] data = File.ReadAllBytes(path);
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Length", data.Length.ToString());
Response.AddHeader("Content-Type", "application/pdf");
Response.AddHeader("Content-Disposition", "attachment; filename=help.pdf");
Response.OutputStream.Write(data, 0, data.Length);
Response.End();

Quando eu chamo o manipulador deste código em qualquer navegador (Chrome, IE ou Firefox), recebo uma caixa de diálogo "Salvar como ..." com o nome da página ( index.aspx ) em vez do nome fornecido em o código ( help.pdf ).

Eu verifiquei o cabeçalho de resposta HTTP em todos os navegadores. Parece assim:

Cache-Control:private
Content-Disposition:attachment
Content-Length:89407
Content-Type:application/pdf
Date:Thu, 07 May 2015 08:43:12 GMT
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
X-UA-Compatible:IE=edge,chrome=1

Como você pode ver, o parâmetro filename é removido do campo Content-Disposition. Então o comportamento do navegador está correto. O servidor web (IIS) parece mexer com o cabeçalho.

Eu encontrei alguém com o mesmo problema aqui . Mas o problema nunca foi resolvido. Alguma idéia?

Nota: Modificar o código não é uma solução. Temos controles de terceiros (Telerik RadGrid) no site que apresentam o mesmo problema com o recurso "Exportar para PDF".

    
por Jenny O'Reilly 08.05.2015 / 11:26

1 resposta

2

O problema é que, devido a um problema do IIS 7.5 , alguém adicionou as linhas a seguir ao web.config arquivo da aplicação:

<outboundRules>
    <rule name="Force pdfs to download" preCondition="only match pdfs">
        <match serverVariable="RESPONSE_Content_Disposition" pattern="(.*)" />
        <action type="Rewrite" value="attachment" />
    </rule>
    <preConditions>
        <preCondition name="only match pdfs">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^application/pdf" />
        </preCondition>
    </preConditions>
</outboundRules>
    
por 12.05.2015 / 12:57

Tags