【问题标题】:Web API Post parameters are always NullWeb API Post 参数始终为 Null
【发布时间】:2012-10-02 12:45:31
【问题描述】:

有没有人找到合适的解决方案? 我只是抱着很大的希望尝试了 WebAPI(在使用 KO 和 HTML5 在 php/restler 中成功实现了 rest api 之后)。获取就像魅力一样工作。在过去 20 多个小时内被困在岗位上,因为无论我的变量始终为空。我确实有 DTO 和存储库实现,这是我框架的一部分。 我尝试了 FromBody 提示以及搜索中几乎所有可用的内容。 我正在使用 Crest 和 Fiddler 对此进行测试。 我什至可以获取原始 request.content,然后自己处理 json 加载等。 这一点我只是感到沮丧并考虑回到 4.0 并使用 wcf 再次生成 ResT。 任何帮助将不胜感激......

DTO:
public class TestEntity
{
    public TestEntity() { } 
    public int UserId { get; set; }
    public string UserName { get; set; }
}

控制器: 公共类 testController : ApiController

{
    // POST api/test
    public TestEntity PostTest([FromBody] TestEntity t)
    {
        var x = new TestEntity();
        if (!this.ModelState.IsValid)
        {

            return x;
        }
        else
        {
            return x;
        }
    }

我正在通过 CREST 调用 ....

【问题讨论】:

  • 使用您的代码并通过 Fiddler 调用它对我来说适用于 XML 和 JSON。您可以通过向控制器添加 GET 方法来排除路由问题,该控制器返回带有一些测试数据的 TestEntity 并调用它。如果可行,请将它返回的数据复制到 Fiddler 作为您的 POST 请求正文,然后查看 t 是否被填充。这将排除序列化问题。如果仍然失败,请尝试发布完整的控制器代码,以及您在 Fiddler 中输入的 URL 和数据以进行测试。
  • 在提琴手中我得到: {"ExceptionType":"System.InvalidOperationException","Message":"没有 MediaTypeFormatter 可用于从媒体类型为“未定义”的内容中读取“TestEntity”类型的对象''.","StackTrace":" 当我在 Crest 中运行时,它实际上会运行特定的方法(我可以调试)并且参数的值为 null
  • 更新:将 Content-Type 更改为 json 后,它现在可以工作了。我很惊讶为什么它不能通过我在以前的项目中广泛使用的 Crest 工作(通过 php 5 中的 restler 2 创建的服务)。我还将检查它如何与通过 KnockoutJS 创建的 json 一起工作
  • 现在当我从我的 html5 页面调用 api 时,我仍然得到空值。客户端代码是:` $.ajax({ datatype: 'json', contentType: "application/json; charset=utf-8", type: 'POST', url: 'localhost:9361/api/controllername', data: { data: ko .toJSON(vmModelName) }, `
  • 已解决 - 这是 javascript 中的一个小不匹配!

标签: asp.net-ajax asp.net-web-api


【解决方案1】:

我认为当您使用 xml 类型调用 api 时出现问题,

Web API 默认使用 Json Serializer,因此您的应用程序在您将内容类型更改为 JSON 后可以正常工作。

查看以下代码并将其添加到您的 WebApiConfig.cs 中,它用于处理 XML 类型的请求。

config.Formatters.XmlFormatter.UseXmlSerializer = true;

然后再次调用您的服务。它将解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2017-08-09
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    相关资源
    最近更新 更多