Как использовать метод AddFile () RestSharp для отправки httpContext.Request.Files [0]? - PullRequest
0 голосов
/ 28 июня 2019

Я использую RestSharp для вызова .NET Web API.

Я отправляю загруженный файл excel в web api.Ниже код прекрасно работает на локальной машине.

Но на сервере у нас нет разрешения на сохранение загруженного файла. Я ищу альтернативный метод для restRequest.AddFile("content", location), который принимает HttpPostedFileBase postedFile = httpContext.Request.Files[0].

RestClient restClient = new RestClient("http://localhost:56360");
RestRequest restRequest = new RestRequest("api/excelupload/Upload");

int readWriteTimeout = restRequest.ReadWriteTimeout > 0
    ? restRequest.ReadWriteTimeout
    : ReadWriteTimeout;
    restRequest.ReadWriteTimeout = readWriteTimeout;
    restRequest.Method = Method.POST;
    restRequest.AddHeader("Content-Type", "multipart/form-data");
    restRequest.AddFile("content", location);
    restRequest.AddParameter("DetailLineNumber", "4");
    var response = restClient.Execute(restRequest);

Чтение файлов в API.

foreach (var content in provider.Contents)
                {
                    if (!string.IsNullOrWhiteSpace(content.Headers.ContentDisposition.FileName))
                    {
                        postedData.File = await content.ReadAsByteArrayAsync();
                    }
               }

1 Ответ

0 голосов
/ 28 июня 2019

Я давно не пользовался RestSharp. Не могли бы вы использовать поток? Примерно так:

public RestRequest CreateUploadFileRequest(string path, string filename, Stream fileStream)
{
    var request = new RestRequest (Method.POST);
    request.Timeout = int.MaxValue; //test
    request.Resource = "/files/{path}";
    request.AddParameter ("path", path, ParameterType.UrlSegment);
    //Need to add the "file" parameter with the file name
    request.AddParameter ("file", filename);
    request.AddFile ("file", s => StreamUtils.CopyStream (fileStream, s), filename);

    return request;
}
...