是否可以禁用模型绑定并在 dotnet 核心中的操作中使用原始请求正文



我想设置一个端点来测试来自第三方的 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 我 usign 它作为表单数据发布,所以一些中间件正在读取正文,它在我的代码中最终为空。 有没有办法禁用模型处理,以便我可以获取请求正文?

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

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

最新更新