Загрузить метод действия с файлом в asp.net core 2.0 - PullRequest
0 голосов
/ 28 мая 2018

Я работаю над проектом веб-API и хочу загрузить файл на сервер.Я использую приведенный ниже код для метода действия загрузки.

[HttpPost]
public async Task Post([FromForm]IFormFile file)
{
    var uploads = Path.Combine(_environment.WebRootPath, "uploads");
    if (file.Length > 0)
    {
        using (var fileStream = new FileStream(Path.Combine(uploads, 
                                          file.FileName), FileMode.Create))
       {
           await file.CopyToAsync(fileStream);
       }
    }
 }

, и я использую приведенный ниже код для консольного клиента для загрузки файла на сервер с использованием API.

static void Main(string[] args)
{
     FileStream stream = new FileStream("D://Infos.txt", FileMode.Open);
     HttpContent fileStreamContent = new StreamContent(stream);
     fileStreamContent.Headers.ContentDisposition = new 
     System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") 
              { Name = "D://Infos.txt", FileName = "D://Infos.txt" };

     fileStreamContent.Headers.ContentType = new 
     System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data");

     using (var client = new HttpClient())
     {
         using (var formData = new MultipartFormDataContent())
         {
             formData.Add(fileStreamContent);

             var response = 
             client.PostAsync("http://localhost:2184/api/values", formData);

             Console.WriteLine(response.Result.IsSuccessStatusCode);
             Console.ReadKey();
          }
     }  
 }

Но когда яя запускаю этот код, я получаю нулевое значение как файл на стороне метода действия.

Я использовал атрибут [FromBody] для параметра IFormFile метода действия, но он тоже не работал.

Почему это не так?не работает?

1 Ответ

0 голосов
/ 28 мая 2018

Измените следующую строку:

System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") 
              { Name = "D://Infos.txt", FileName = "D://Infos.txt" };

на:

System.Net.Http.Headers.ContentDispositionHeaderValue("form-data") 
                  { Name = "file", FileName = "D://Infos.txt" };

Привязка модели будет выполнена неправильно, если имена не совпадают.

...