Webapi POST 导致 MVC 控制器中的 object

Posted

技术标签:

【中文标题】Webapi POST 导致 MVC 控制器中的 object【英文标题】: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" 【参考方案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

以上是关于Webapi POST 导致 MVC 控制器中的 object的主要内容,如果未能解决你的问题,请参考以下文章

没有数据的 WebAPI POST 导致应用程序崩溃

RESTful架构中的webapi

在 POST 数据中从 Api 控制器重定向到 MVC 控制器

为啥 jQuery AJAX Post Content-Type=application/json 到 MVC 控制器操作方法导致空参数

AJAX POST 到 Web API 控制器和 CSRF

MVC WebApi跨域ajax接受post数据笔记