Параметр потока всегда равен нулю

Я отправляю почтовый запрос от своего клиента (ASP.NET MVC) в службу webapi, однако контроллеру службы webapi требуется параметр Stream, который всегда равен null.

Запрос от приложения ASP.NET MVC:

using(var client = new HttpClient())
{
    Token token = GetToken();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token.TokenType, token.AccessToken);
    var content = new StreamContent(stream);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    content.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { Name = "keliaStream" };
    var res = client.PostAsync(GetSdcUri(), content).Result;
}

Контроллер веб-апи:

// POST: api/Publication
[HttpPost]
[Route("whatever-route")]
[RequireHttps]
public System.Web.Mvc.ActionResult GenerateSDCFromTBox([FromBody]Stream keliaStream)
{
    // whatever
}

keliaStream всегда равно нулю, что мне не хватает?


person Florian    schedule 31.12.2019    source источник
comment
Вы пытались вместо этого использовать this.Request.InputStream или принять его в качестве параметра метода действия?   -  person Dai    schedule 31.12.2019
comment
@Dai: Мой элемент управления наследуется от ApiController, поэтому у меня нет Request.InputStream, вместо этого у меня есть HttpContext.Current.Request.InputStream. Но если я попытаюсь использовать его, он выдает ошибку: HttpContext.Current.Request.InputStream = 'HttpContext.Current.Request.InputStream' threw an exception of type 'System.Web.HttpException'   -  person Florian    schedule 31.12.2019
comment
ApiController — это System.Web.Http (веб-API), который представляет собой отдельный стек от ASP.NET MVC (то есть System.Web.Mvc) — я думаю, что это часть вашей проблемы (не смешивайте MVC и веб-API, если вы не используете ASP.NET Core) .   -  person Dai    schedule 31.12.2019
comment
@Dai: Мое веб-приложение - ASP.NET MVC, и мне нужно запросить существующий веб-сервис, который является WebAPI. Тут у меня особо нет выбора :-/   -  person Florian    schedule 31.12.2019
comment
Выполнение запросов к другой веб-службе, использующей веб-API ASP.NET, вообще не требует использования веб-API или даже C#/.NET.   -  person Dai    schedule 31.12.2019
comment
вам нужно добавить поток как тело, а не заголовки в MVC   -  person Prany    schedule 31.12.2019


Ответы (1)


Благодаря вашим комментариям я смог найти решение.
Если у кого-то возникла та же проблема, вот мое решение:

Клиент (ASP.NET MVC):

using(var client = new HttpClient())
{
    Token token = GetToken();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(token.TokenType, token.AccessToken);
    var content = new StreamContent(stream);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    var res = client.PostAsync(GetSdcUri(), content).Result;
}

СЕРВЕР (WebApi):

public System.Web.Mvc.ActionResult GenerateSDCFromTBox()
{
    Stream stream = Request.Content.ReadAsStreamAsync().Result;
    // return do what ever with stream
}
person Florian    schedule 31.12.2019