我正在使用 ApiController 类开发 ASP.NET MVC4 中的 Web API。 API 将进行基于签名验证的身份验证检查。每个请求都必须使用 POST 正文和一些 key 进行签名。
我还想使用从 JSON 到对象的模型绑定(bind)。
现在我有一个问题。我可以发送 JSON 和 .net 将它很好地绑定(bind)到对象,但我无法进行验证。
当 POST 的 Contenttype 是 application/json 时,如何获取 POST 内容(以发送的确切形式)?
例子
POST 内容(应用程序/json):
{message: "blah"}
模型类:
public class RequestModel
{
public String Message { get; set; }
}
如何获取ApiController中的JSON?
最佳答案
您可以使用 request.Content.ReadAsStringAsync();
将请求正文读取为字符串。但是,这在操作方法或过滤器中不起作用。
在 ASP.NET Web API 管道中,模型绑定(bind)发生在操作过滤器运行之前,然后操作方法执行。模型绑定(bind)器会读取请求主体(这是一个只读一次的流)并清空内容。相反,如果您从模型绑定(bind)之前运行的组件(例如消息处理程序)中读取内容,则可以读取请求正文(在您的情况下为 JSON)。
public class MyHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
var messageBody = await request.Content.ReadAsStringAsync();
return await base.SendAsync(request, cancellationToken);
}
}
在这里,messageBody 将具有 JSON。最好在此处实现检查,因为处理程序在管道中运行较早,您将希望尽早实现身份验证。
关于asp.net - WebAPI : verification of json signing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17619728/