2016-05-15 10 views
1

私は現在、DropboxアカウントからファイルをダウンロードするMVC WEB Apiアプリケーションで単純なコントローラメソッドを作成しています。問題は、メソッドからファイルを返すことができないということです。「名前 'File'は現在のコンテキストに存在しません」と書かれていますが、ドキュメントではこのコンストラクタを呼び出すことができます。
コード:ASP.NET MVC名前 'File'は現在のコンテキストに存在しません

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

関連する問題