gpt4 book ai didi

c# - 发布参数始终为空

转载 作者:IT王子 更新时间:2023-10-29 03:29:51 26 4
gpt4 key购买 nike

自从为 WebAPI 升级到 RC 后,我在 WebAPI 上调用 POST 时遇到了一些非常奇怪的问题。我什至回到了新项目生成的基本版本。所以:

public void Post(string value)
{
}

并从 Fiddler 调用:

Header:
User-Agent: Fiddler
Host: localhost:60725
Content-Type: application/json
Content-Length: 29

Body:
{
"value": "test"
}

当我调试时,字符串“value”从未被赋值。它总是 NULL。有人遇到过这个问题吗?

(我首先看到的是更复杂类型的问题)

问题不仅限于 ASP.NET MVC 4,RC 安装后新的 ASP.NET MVC 3 项目也会出现同样的问题

最佳答案

我今天一直在挠头。

我的解决方案是将 [FromBody] 更改为 HttpRequestMessage,本质上是向上移动 HTTP 堆栈。

在我的例子中,我通过电线发送数据,这些数据是压缩的 json,然后是 base64。所有这一切都来自一个安卓应用程序。

我的 Web 端点的原始签名如下所示(使用 [FromBody]):

My original endpoint

我对这个问题的修复是恢复使用 HttpRequestMessage 作为我的端点的签名。

enter image description here

然后您可以使用这行代码访问发布数据:

enter image description here

这有效并允许您访问原始的未触及的发布数据。您不必为 fiddler 在字符串开头放置一个 = 符号或更改内容类型而烦恼。

顺便说一句,我首先尝试按照上面的答案之一将内容类型更改为:“Content-Type:application/x-www-form-urlencoded”。对于原始数据,这是个糟糕的建议,因为它会去掉 + 字符。

所以一个 base64 字符串开头是这样的:“MQ0AAB+LCAAAAAA”,结尾是这样的“MQ0AAB LCAAAAAA”!不是你想要的。

使用 HttpRequestMessage 的另一个好处是您可以访问端点内的所有 http header 。

关于c# - 发布参数始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10984040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com