我可以禁用模型绑定并在dotnet核心的操作中使用原始请求体吗?

时间:2017-05-11 22:11:54

标签: .net-core

我想设置一个端点来测试来自第三方的webhook。他们的文件一直很差,没有提前准确地说出我会得到什么。我所做的是设置一个ApiController,它只接受一个请求,并向表中添加一行,并显示它们发送的内容。这让我至少可以验证他们正在调用webhook,并查看数据以便我可以编程。

// ANY api/webook/*
[Route("{*path}")]
public ActionResult Any(string path)
{
    string method = Request.Method;
    string name = "path";
    string apiUrl = Request.Path;
    string apiQuery = Request.QueryString.ToString();
    string apiHeaders = JsonConvert.SerializeObject(Request.Headers);
    string apiBody = null;
    using (StreamReader reader = new StreamReader(Request.Body))
    {
        apiBody = reader.ReadToEnd();
    }
    Add(method, name, apiUrl, apiQuery, apiHeaders, apiBody);
    return new JsonResult(new { }, JsonSettings.Default);
}

这很好用,除了这个新的webhook我用它作为表单数据发布,所以一些中间件正在读取正文,它在我的代码中最终为null。有没有办法禁用模型处理,以便我可以到达请求体?

1 个答案:

答案 0 :(得分:0)

您实际上可以使用模型绑定来优势,并使用FromBody属性跳过所有流读取。试试这个:

[Route("{*path}")]
[HttpPost]
public ActionResult Any(string path, [FromBody] string apiBody)