Sunucudan alınan yinelenen üstbilgiler


119

Sunucudan alınan yinelenen üstbilgiler

Sunucudan gelen yanıt, yinelenen başlıklar içeriyordu. Bu sorun genellikle yanlış yapılandırılmış bir web sitesi veya proxy'nin sonucudur. Bu sorunu yalnızca web sitesi veya proxy yöneticisi düzeltebilir.

Hata 349 (net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Birden çok farklı Content-Disposition üst bilgisi alındı. HTTP yanıtını bölme saldırılarına karşı koruma sağlamak için buna izin verilmez.

Chrome'da pdf'ye aktarırken bu hatayı buldum.

Response.Buffer = false;
Response.ClearHeaders();
string ext = objProp.PACKAGEFILENAME.Substring(objProp.PACKAGEFILENAME.LastIndexOf("."));
string ext1 = ext.Substring(1);
Response.ContentType = ext1;
Response.AddHeader("Content-Disposition", "target;_blank,attachment; filename=" + objProp.PACKAGEFILENAME);
const int ChunkSize = 1024;
byte[] binary = objProp.PACKAGEDOCUMENT;
System.IO.MemoryStream ms = new System.IO.MemoryStream(binary);
int SizeToWrite = ChunkSize;

for (int i = 0; i < binary.GetUpperBound(0) - 1; i = i + ChunkSize)
{
    if (!Response.IsClientConnected) return;
    if (i + ChunkSize >= binary.Length) SizeToWrite = binary.Length - i;
    byte[] chunk = new byte[SizeToWrite];
    ms.Read(chunk, 0, SizeToWrite);
    Response.BinaryWrite(chunk);
    Response.Flush();
}
Response.Close();

Bunu nasıl düzeltebilirim?


18
Dosya adındaki virgülün bu hatayı vereceğini de buldum (yalnızca Chrome'da). Dosya adı = "abc, xyz.pdf" nin geçerli olduğunu söylemenin bir yolu olması gerektiğini düşünüyorum. "," Yerine başka bir şey koyabileceğimizi anlıyorum, ancak dosya adını olduğu gibi korumak ve geri döndürmek istiyorum. Denediğim diğer tarayıcıların hiçbirinde (IE, FireFox, Safari, Opera) bu sorunu yaşamadım.
cusman

29
Yani dosya adında virgül olmasına izin vermenin bir yolu var. Sadece dosya adını alıntılamalıyız. Response.AddHeader("content-disposition", "attachment; filename=\"" + FileNameWithCommas + "\"");
cusman

3
Teşekkürler @cusman. Bu tam olarak benim sorunumdu - dosya adında bir virgül VE yalnızca Chrome'un bununla ilgili bir sorunu vardı.
PeterKA

1
Olası Chrome
Ian Kemp

Yanıtlar:


236

Bu biraz eski ama google sıralamasında yüksekti, bu yüzden Chrome'dan bulduğum cevabı atacağımı düşündüm , pdf ekranı, sunucudan alınan yinelenen başlıklar

Temelde benim sorunum dosya adının virgül içermesiydi. Onları kaldırmak için virgülle değiştirin ve iyi olmalısınız. Geçerli bir dosya adı oluşturma işlevim aşağıdadır.

    public static string MakeValidFileName(string name)
    {
        string invalidChars = Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
        string invalidReStr = string.Format(@"[{0}]+", invalidChars);
        string replace = Regex.Replace(name, invalidReStr, "_").Replace(";", "").Replace(",", "");
        return replace;
    }

22
Bağlantılı cevapta @ roryok'un yorumundan, dosya adı etrafındaki alıntılar sorunları çözmelidir. Ve aslında teknik özellik, dosya adının alıntılanması gerektiğini söylüyor.
Touko

Tırnak işaretleri yardımcı olabilir (ve eklenmelidir), ancak bu işlevin sonunda geçerli olmayan karakterlerin çıkarılması gibi ek bir faydası vardır, böylece sonunda daha dostça bir ad yaparsınız.
Bryan Roberts

@Younisbarznji benim için çalıştı, dosya
adındaki

3
Benim için çalışıyor! Dosya adlarında virgül ve boşluklar iyi bir fikir değildir!
Hugo

.Replace(";", "").Replace(",", "")Zaten RegEx ile değiştirirken neden ? ;,RegEx deseninize ekleyin :string invalidReStr = string.Format(@"[{0};,]+", invalidChars); string replace = Regex.Replace(name, invalidReStr, "_");
SBF

97

Sunucu GEREKEN onların cevaplarında @cusman ve @Touko tarafından belirtildiği gibi, dosya sonuna çift tırnak koyun.

Örneğin:

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");

Ayrıca dosya adındaki çift tırnak işaretlerini alt çizgilerle değiştirdim.
Peter L

Ben de aynısını yaptım, burada da altçizgilerle dosya adı alıyorum.
Jamsheer

5

Benim için sorun, dosya adında değil, aşağıdaki gibi virgülle ilgiliydi: -

Response.ok (streamingOutput, MediaType.APPLICATION_OCTET_STREAM_TYPE) .header ("içerik düzenleme", " ek, dosya adı = dosyanızın_adı"). Build ();

Ekten sonra yanlışlıkla virgül koydum. Virgül yerine noktalı virgül koyarak çözüldü.


3

Dosya adınızın başına aşağıdaki gibi bir çift tırnak işareti koyun:

this.Response.AddHeader ("İçerik-düzenleme", $ "ek; dosyaadı = \" {outputFileName} \ "");


Ancak indirilen dosya adında bir alt çizgi var.
Jamsheer

1

Başlıktaki dosya adının etrafında çift tırnak işareti standarttır. MDN web belgeleri . Alıntıların çıkarılması, dosya adındaki karakterlerden kaynaklanan sorunlar için birden fazla fırsat yaratır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.