asp.net - WebAPI : verification of json signing

标签 asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

我正在使用 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/

相关文章:

c# - 通过表单 POST 发送 Base64 数据图像

javascript - ASP.NET MVC/JavaScript - 从 C# amp 解码编码的 HTML 字符串

css - 无法更改文本框的大小

c# - C# ASP.NET 中的连接字符串问题

c# - mvc - 重用服务行为

javascript - 在 Web 应用程序 MVC 的后台操作中执行 javascript 代码

asp.net-mvc - 为什么输出缓存不适用于我的 ASP.NET MVC 4 应用程序?

asp.net - Viewstate MAC 验证失败 ASP.Net 2.0 SP2

c# - 在 ASP.NET 应用程序上以编程方式配置 Microsoft.IdentityModel 不起作用 - 被动重定向已启用但从未起作用

javascript - 当 OnClientClick 返回 False 时,防止 LinkBut​​ton 触发 OnClick