2016-06-03 4 views
0

я следующий код в моем C# Web APIПользовательский заголовок не виден на стороне клиента

HttpResponseMessage result = null; 
var stream = new MemoryStream(File.ReadAllBytes(tempFileName)); 
result = Request.CreateResponse(HttpStatusCode.OK); 
result.Content = new StreamContent(stream); 
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
result.Content.Headers.add("fileName", Path.GetFileName(tempFileName)); 
File.Delete(tempFileName); 
return result; 

и после на стороне клиента

var deferred = this.$q.defer(); 
this.$http({ 
       method: 'GET', 
       url: someURL, 
       responseType: 'arraybuffer' 
}).then(function (response: any) { 
    var blob = new Blob([response.data], { type: "application/octet-stream" }); 
    var link = document.createElement('a'); 
    var url = URL.createObjectURL(blob); 
    link.setAttribute('href', url); 
    link.setAttribute("download", "demo.doc"); 
    link.click(); 
    deferred.resolve(); 
    }); 
    return deferred.promise; 

Но когда я добавить часы для response.headers() на стороне клиента Javascript это только показывает мне следующее

{content-type: "application/octet-stream", cache-control: "private"} 

Может кто-нибудь помочь мне найти, где заголовок имя файла?

ответ

0

Первое, что я заметил, это ваш «add» должен «Добавить», который, я думаю, может быть опечаткой на вашем конце, но хотел указать.

result.Content.Headers.Add("fileName", Path.GetFileName(tempFileName)); 

Как я могу видеть, что вы используете $ службу угловой за HTTP, чтобы сделать ваш сервер AJAX звонков, вы можете использовать свойство «заголовки» объекта ответа следующим образом.

response.headers('fileName') 

Если вы используете JQuery, то вы можете просто использовать следующую команду, где jqXHR является jqXHR объект в JQuery, которая является надстройкой объекта XMLHttpRequest.

jqXHR.getResponseHeader('filename') 
+0

Благодарим за ответ, но ни одно из решений не работает, так как вы можете видеть только два заголовка на стороне клиента. Я не уверен, где делать изменения на стороне сервера или на стороне клиента. –

+0

Я бы попытался перехватить сетевой трафик (для этого вы можете использовать инструменты разработчика Chrome или Fiddler и т. Д.), А затем проверить заголовки http respone. Если вы не видите свой собственный заголовок 'filename' там, то, скорее всего, он не передается с сервера. –

Смежные вопросы