【问题标题】:Webapi POST results in {object} in MVC ControllerWebapi POST 导致 MVC 控制器中的 {object}
【发布时间】:2018-11-24 05:04:12
【问题描述】:

我正在尝试将poststring 转换为MVC Controller,结果始终为{object},我无法对其进行解析\解码\反序列化。我怎样才能得到那个字符串?

C#:

[HttpPost]
public void Foo(dynamic str)
{
    //str always equals to '{object}'
    var path = @"C:\cookieParserXmlOutput\";
}

客户端代码:

then((res:any) => {
            let strObj={
                str:res.data
            };
            return this.$http.post("/App/Foo",strObj,{
                headers: { "Content-Type": "application/json; charset=utf-8" }
              });

        }).then((res:any)=>{
            return res;
        })

【问题讨论】:

  • 为什么是dynamic 而不仅仅是string
  • string 结果为null。我不知道为什么....
  • 很奇怪。只要您确定在浏览器开发人员工具中检查了请求并在那里看到它,它就不应该为空。
  • strObj的值是多少?
  • @mjwills 它只是一个键值对象。同{ "name" : "jon" }

标签: c# angularjs asp.net-web-api


【解决方案1】:

如果您想在POST 正文中发送object,您还应该在 ASP.NET Endpoint 方法中检索object。将您的 string str 包装成 class

public class MyRequest
{
    public string Str { get; set; }
}

[HttpPost]
public void Foo(MyRequest request)
{
    ...
}

【讨论】:

  • 这就是诀窍。非常感谢,今天学到了新东西。
【解决方案2】:

将内容类型更改为text/plain,并使用JSON.stringify将对象转换为字符串

return this.$http.post("/App/Foo",JSON.stringify(strObj),{
      headers: { "Content-Type": "text/plain; charset=utf-8" }
});

【讨论】:

  • 我尝试使用 Postman 将类型更改为 text/plain,结果仍然相同
  • 同样的事情,{object}
猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多