2014-11-18 3 views
0

Я пытаюсь загрузить файл с помощью веб-API 2. Но браузер дает «веб-страницу недоступен», когда я напрямую указываю URL-адрес в браузере.Загрузить файл с помощью web api 2

Я написал следующее настраиваемое действие

public class FileActionResult : IHttpActionResult 
    { 
     public FileActionResult(string data) 
     { 
      this.Data = data; 
     } 

     public string Data { get; private set; } 

     public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) 
     { 
      string tempFolderPath = HttpContext.Current.Server.MapPath("~/api/tempfiles"); 
      HttpResponseMessage response = new HttpResponseMessage(); 
      Guid guid = Guid.NewGuid(); 
      string folderPath = Path.Combine(tempFolderPath, guid.ToString()); 
      if(!Directory.Exists(folderPath)) 
      { 
       Directory.CreateDirectory(folderPath); 
      } 
      string filePath = Path.Combine(folderPath, guid.ToString() + ".json"); 
      File.WriteAllText(filePath, Data); 
      string zipFile = folderPath + ".zip"; 
      ZipFile.CreateFromDirectory(folderPath, zipFile); 
      response.Content = new StreamContent(File.OpenRead(zipFile)); 
      response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
      { 
       FileName = "file.zip", 
       DispositionType = "attachment" 
      }; 
      return Task.FromResult(response); 
     } 
    } 

Я не уверен, что здесь не так. Может ли кто-нибудь помочь мне в этом?

Редактировать Когда я использую Google-PostMan для проверки методов, он показывает правильный ответ. Как заставить браузер загружать файл? Thanks

+0

Этот код выглядит хорошо для меня. Может быть, что-то не так в вашем методе WebAPI? Вы уверены, что используете правильный HTTP-глагол? – vzayko

+0

Я использую HTTPGet. –

+0

Я имею в виду, что «страница недоступна» может привести к неправильному вызову метода, т. Е. Ваш метод ожидает GET, но вы используете POST или неправильное количество параметров метода или пользовательские проблемы маршрутизации. Попробуйте поймать ваш вызов, используя инструменты браузера F12, и проанализируйте параметры ввода и ответ сервера. – vzayko

ответ

1

Код работает нормально. Однако проблема была связана с Telerik Control. Я использую элементы управления Telerik на своем веб-сайте. Telerik делал некоторое сжатие во время загрузки файла. Мне пришлось обойти мой URL-адрес, чтобы он работал.

<sectionGroup name="telerik.web.ui"> 
     <section name="radCompression" type="Telerik.Web.UI.RadCompressionConfigurationSection, Telerik.Web.UI" allowDefinition="MachineToApplication" requirePermission="false"/> 
    </sectionGroup> 
    </configSections> 

    <telerik.web.ui> 
    <radCompression> 
     <excludeHandlers> 
     <add handlerPath="some path" matchExact="false"/> 
     </excludeHandlers> 
    </radCompression> 
    </telerik.web.ui> 
Смежные вопросы