【发布时间】:2017-12-08 00:41:34
【问题描述】:
我不知道这是否是一个错误,但我无法在服务器端获取原始请求。
考虑以下控制器方法:
[AllowAnonymous]
[Route("api/sayHello")]
[HttpPost]
public string SayHello([FromBody] string userName)
{
return $"Hello, {userName}.";
}
我通过 cUrl 调用它:
curl -X POST 'https://localhost:809/api/sayHello' --insecure -d "=userName"
现在我正在尝试添加一些日志记录。我添加了一个执行以下操作的全局过滤器:
public async Task LogFilterAction(HttpActionContext context)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
LogFilterAction(context.ActionDescriptor?.ControllerDescriptor?.ControllerType,
context.ActionDescriptor?.ActionName,
context.Request?.RequestUri,
await GetDataAsString(context.Request?.Content),
context.Response?.StatusCode
);
}
private static async Task<string> GetDataAsString(HttpContent content)
{
if (content == null)
return null;
var contentBytes = await content.ReadAsByteArrayAsync();
return Encoding.UTF8.GetString(contentBytes);
}
但问题是:由于未知原因,contentBytes 始终是一个空数组。我看到它的实际长度是 9(它的长度是 =userName 字符串)
甚至
如您所见,ASP.Net 已成功请求参数,但是它不会以原始方式返回。 Stream 的 position=0,contentConsumed=false,其他一切都很好。但我无法读取传递给控制器的数据。
这里有什么问题?
【问题讨论】:
-
你明白了吗?
标签: c# asp.net asp.net-web-api