У меня есть какой-то устаревший код, с которым я пытаюсь работать, и мне нужно вернуть существующий объект, содержащий Stream из ApiController
public class LegacyObject
{
public bool Result { get; set; }
public Stream Stream { get; set; }
}
Код API
public class BindJson : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
string rawRequest;
using (var stream = new StreamReader(actionContext.Request.Content.ReadAsStreamAsync().Result))
{
stream.BaseStream.Position = 0;
rawRequest = stream.ReadToEnd();
}
rawRequest = rawRequest.ToString();
var obj = JsonConvert.DeserializeObject<LegacyParameters>(rawRequest.ToString());
actionContext.ActionArguments["parameter"] = obj;
}
}
public class ReportsController : ApiController
{
[BindJson]
[HttpPost]
public LegacyObject ReturnReport([FromBody]LegacyParameters parameter)
{
LegacyObject r = LegacyClass.GetReportStream(parameters);
return r; //Object properties are correctly set and no errors at this point
}
}
Мой вызов к API:
using (var httpClient = new System.Net.Http.HttpClient())
{
httpClient.BaseAddress = new Uri("http://myserver/");
string contents = JsonConvert.SerializeObject(paramList);
var response = httpClient.PostAsync("/api/ReturnReport", new StringContent(contents, Encoding.UTF8, "application/json")).Result;
}
Я получаю 500 Внутренняя ошибка сервера на PostAsync, когда мой LegacyObject.Stream имеет содержимое,Это работает, когда содержимое потока равно нулю.Я работаю локально на своем ПК для разработки, и веб-сервер для API - IIS Express.
Буду признателен за любой совет.