У меня есть собственный веб-API с использованием Owin и Katana. Я хотел бы отправить файлы (могут быть довольно большими, несколько сотен МБ) из примера клиента и сохранить эти файлы на диске сервера. В настоящее время просто тестирую сервер на моей локальной машине.
У меня есть следующее на машине тестового клиента (здесь написано изображение, но это не всегда будет изображение):
using System;
using System.IO;
using System.Net.Http;
class Program
{
string port = "1234";
string fileName = "whatever file I choose will be here";
static void Main(string[] args)
{
string baseAddress = "http://localhost:" + port;
InitiateClient(baseAddress);
}
static void InitiateClient(string serverBase)
{
Uri serverUri = new Uri(serverBase);
using(HttpClient client = new HttpClient())
{
client.BaseAddress = serverUri;
HttpResponseMessage response = SendImage(client, fileName);
Console.WriteLine(response);
Console.ReadLine();
}
}
private static HttpResponseMessage SendImage(HttpClient client, string imageName)
{
using (var content = new MultipartFormDataContent())
{
byte[] imageBytes = System.IO.File.ReadAllBytes(imageName);
content.Add(new StreamContent(new MemoryStream(imageBytes)), "File", "samplepic.png");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("multipart/form-data"));
return client.PostAsync("api/ServiceA", content).Result;
}
}
Во-первых, это правильный способ отправки файла с помощью POST?
И вот тут я действительно потерялся. Я не знаю, как сохранить файл, который я получаю в методе Post моего ServiceAController, который наследует ApiController. Я видел несколько других примеров, в которых использовался HttpContext.Current, но, поскольку он размещен самостоятельно, он кажется нулевым.