2016-05-15 114 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

相关问题