c# - HttpClient.PostAsync 返回 System.IO.Stream 作为属性
问题描述
我有一些我正在尝试使用的遗留代码,并且需要返回一个包含来自ApiController的Stream的现有对象
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;
}
当我的 LegacyObject.Stream 有内容时,我在 PostAsync 上收到500 Internal Server Error 。它在流内容为空时起作用。我在我的开发 PC 上本地工作,API 的 Web 服务器是 IIS Express。
任何意见,将不胜感激。
解决方案
因此,为了获得有关 500 Internal Server Error 的更多详细信息,我将其添加到我的项目WebApiConfig Register
config.Services.Replace(typeof(IExceptionLogger), new UnhandledExceptionLogger());
有了这堂课
public class UnhandledExceptionLogger : ExceptionLogger
{
public override void Log(ExceptionLoggerContext context)
{
var log = context.Exception.ToString();
//Write the exception to your logs
}
}
日志变量现在为我提供了我需要调试的详细信息
仅供参考 - 错误是我的 Stream 上的读取超时
推荐阅读
- angular - 将切换列图标更改为文本
- sharepoint - OneNote API - 获取存储在组织 SharePoint 网站中的笔记本
- python - 返回类的新实例的方法
- typescript - ReferenceError:未定义“用户名”
- swift - 仅将 sizeForItemAt 应用于一个 collectionView
- kubernetes - Kubernetes:基于路径仅适用于 root
- jquery - 使用jquery验证远程消息错误实现输入标签错误
- c# - 为什么我对 TextBox 验证规则参数的绑定不起作用?
- c# - 如何从对象发送到组合框 1 属性
- dto - 是否可以设计一个只返回部分 API 响应的 DTO?