2016-05-15 82 views
1

我正在從我的MVC WEB Api應用程序中寫入一個簡單的控制器方法,該方法從Dropbox帳戶下載文件。問題是我無法從方法中返回文件:它說「名稱'文件'在當前上下文中不存在」,但在文檔中可以調用該構造函數。
代碼:ASP.NET MVC當前上下文中不存在名稱'文件'

public async Task<FileResult> GetFile(string folder, string file) 
{ 
    using (var dbx = new DropboxClient("generated token key")) 
    { 
     using (var response = await dbx.Files.DownloadAsync(folder + "/" + file)) 
     { 
      var result = await response.GetContentAsStringAsync(); 
      return File(result, file); 
     } 
    } 
} 

完全DropBoxController.cs類:

using Dropbox.Api; 
using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 
using System.Web.Http; 
using System.Web.Mvc; 

namespace TestDropBox.Controllers 
{ 
    public class DropBoxController : ApiController 
    { 
     // GET: api/DropBox 
     public async Task<IEnumerable<string>> Get() 
     { 

      List<string> AccountData= new List<string>(); 
      using (var dbx = new DropboxClient("generated token")) 
      { 
       var full = await dbx.Users.GetCurrentAccountAsync(); 
       Console.WriteLine("{0} - {1}", full.Name.DisplayName, full.Email); 

       AccountData.Add(full.Name.DisplayName); 
       AccountData.Add(full.Email); 

      } 

      return DatiAccount; 
     } 

     [System.Web.Http.HttpGet] 
     public async Task<FileResult> GetFile(string folder, string file) 
     { 
      using (var dbx = new DropboxClient("generated token")) 
      { 
       using (var response = await dbx.Files.DownloadAsync(folder + "/" + file)) 
       { 
        var result = await response.GetContentAsStringAsync(); 
        return new File(result, file); 
       } 
      } 
     } 


     // GET: api/DropBox/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

     // POST: api/DropBox 
     public void Post([FromBody]string value) 
     { 
     } 

     // PUT: api/DropBox/5 
     public void Put(int id, [FromBody]string value) 
     { 
     } 

     // DELETE: api/DropBox/5 
     public void Delete(int id) 
     { 
     } 
    } 
} 

我怎麼能解決這個問題?謝謝。

+0

你真的有需要使用聲明? –

+0

我目前使用System.Web.Mvc – Gab

+0

你能告訴你如何聲明你的控制器類嗎? – Shyju

回答

0

您正在使用ApiController。你的更新方法可能看起來像...

[System.Web.Http.HttpGet] 
public async Task<HttpResponseMessage> GetFile(string folder, string fileName) { 
    using (var dbx = new DropboxClient("generated token")) { 
     using (var file = await dbx.Files.DownloadAsync(folder + "/" + fileName)) { 
      var content = await file.GetContentAsStringAsync(); 
      var statuscode = HttpStatusCode.OK; 
      var response = Request.CreateResponse(statuscode); 
      var stream = new MemoryStream(Encoding.UTF8.GetBytes(content ?? "")); 
      response.Content = new StreamContent(stream); 
      response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { 
       FileName = fileName 
      }; 
      return response; 
     } 
    } 
} 
1

您從ApiController繼承,因此System.Web.Mvc.File ctor不可訪問(受保護),這就是爲什麼您要收回錯誤。

看一看這個線程: File Download with api controller

+0

我提出了你的答案,因爲你可以在我提交答案之前提交答案。 – Nkosi

相關問題