学无先后达者为师!
不忘初心,砥砺前行。

ASP.NET Core 将请求的原始 JSON 绑定到字符串

如果你想获取客户端上报上来的原始 JSON ,除了读取请求流之外,还可以试试以下两个方法:

方法1:使用 dynamic 作为参数类型

该方法非常简单,且能保证得到的 JSON 格式是正确的。但会产生额外的消耗。

[HttpPost]
public void Post([FromBody] dynamic data)
{
    //str 既是请求体的原文
    string str = data.ToString();
}

方法2:使用自定义的 RawJsonBodyInputFormatter

该方法的优点是:避免了使用 dynamic 类型作为参数时产生的额外消耗。
缺点是:没有对 JSON 进行验证,且需要对应用程序进行一些改动。

首先,新建一个 RawJsonBodyInputFormatter :

public class RawJsonBodyInputFormatter : InputFormatter
{
    public RawJsonBodyInputFormatter()
    {
        this.SupportedMediaTypes.Add("application/json");
    }

    public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
    {
        var request = context.HttpContext.Request;
        using (var reader = new StreamReader(request.Body))
        {
            var content = await reader.ReadToEndAsync();
            return await InputFormatterResult.SuccessAsync(content);
        }
    }

    protected override bool CanReadType(Type type)
    {
        return type == typeof(string);
    }
}

配置 MvcOptions :

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers(options =>
{
    options.InputFormatters.Insert(0, new RawJsonBodyInputFormatter());
});

这样你就可以在控制器中获取原始 JSON :

[HttpPost]
public IActionResult Post([FromBody]string value)
{
    // value will be the request json payload
}

赞(1) 打赏
未经允许不得转载:码农很忙 » ASP.NET Core 将请求的原始 JSON 绑定到字符串

评论 抢沙发

给作者买杯咖啡

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册