首页 新闻 会员 周边 捐助

【web api】用POST获取不到前端提交的数据

0
[待解决问题]

代码如下

我的代码如下Invite.cs类

 public class Invite
    {
        public string roomid { get; set; }
        public List<Calleeid> calleeids { get; set; }
        public string location { get; set; }
    }

    public class Calleeid
    {
        public string jobnumber { get; set; }
        public string phonenumber { get; set; }
    }

WebConfig.cs类

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务
            // 将 Web API 配置为仅使用不记名令牌身份验证。
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            
        }
    }

 

InviteController.cs 类

复制代码
[HttpPost]
        // POST: api/invite
        public IHttpActionResult Post([FromBody]Invite invite)
        {

            foreach (Calleeid temp in invite.calleeids)
            {
                if (temp.jobnumber == null)
                {
                    return Ok("呼叫2");
                }
                else
                {
                    return Ok("呼叫1");
                }
            }
            return Ok("");
复制代码

 

前端我是用postman提交的数据

 

但是POST里面一直获取不到数据,我在

http://stackoverflow.com/questions/20226169/how-to-pass-json-post-data-to-web-api-method-as-object

这里也看到了,还是没解决我的问题,求助,Get请求可以,POST请求就是不行

 

 

 

GhostClock的主页 GhostClock | 菜鸟二级 | 园豆:204
提问于:2016-11-14 16:17
< >
分享
所有回答(4)
0

将[FromBody]去掉!

Jeffcky | 园豆:2789 (老鸟四级) | 2016-11-14 16:40

不行,还以一样值为null

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-14 16:46

@GhostClock: 那你好好看看诺,估计是前台参数传递有问题

支持(0) 反对(0) Jeffcky | 园豆:2789 (老鸟四级) | 2016-11-14 16:48

@JeffckyWang: 但是为什么我GET请求都可以呢?这这个GET请求不管是带参还是不带参,都可以得到前台传过来的参数,就POST,PUT,DELETE请求获取不到

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-14 17:01
0

提交数据的时候用raw,然后选application/json,数据要用同Invite相匹配的json字符串。

ensleep | 园豆:1682 (小虾三级) | 2016-11-14 17:30

我是用postman提交的数据呀,就是post请求传不过去呀

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 08:41

@GhostClock: 我没说你没用post好么,我说你没有用raw和对应的序列化格式。

认真看我的回答好么?不懂一共几十个字,你跳过了几个字。

支持(0) 反对(0) ensleep | 园豆:1682 (小虾三级) | 2016-11-15 09:05

@ensleep: 好吧,我先走用raw拼json传过去,格式如下:

 

后台接受代码如下:

[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpPost]
public IHttpActionResult Post(string status, string date)
 {
    string ok = status + date;
    return Ok(ok );
}

现在报如下错误:直接报405

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 10:19
0

学写api第一步:看请求报文.谷歌浏览器按F12

吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-14 18:37

我是用postman提交的数据呀,就是post请求传不过去呀

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 08:41

@GhostClock: 那你把报文发上来让大家看看有什么问题.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-15 10:18

@吴瑞祥: 疑问,我们明明是POST请求,这里的Allow为什么是GET??

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 10:34

@GhostClock: 这是响应报文啊大爷...让你发请求报文.而且听我一句.按F12看报文吧...等你有经验了.再来臆想报文什么样子..

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-15 11:04

@GhostClock: 或者你按code按钮切到http看他的请求报文也是可以的..

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-15 11:06

@吴瑞祥: 并看不出什么,还是405

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 12:00

@GhostClock: webapi默认只支持xml和json格式数据.不只是form表单格式

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-15 13:39

@吴瑞祥: 

POST /api/Invite HTTP/1.1
Host: localhost:52218
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 15b8584d-d3d6-6175-16d9-3f9054110979

{
    "status":"fjdkn",
    "date":"151212"
}

大神帮帮忙呀,这个该死的问题困扰了我好几天了,睡觉都梦到这个 5555

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 15:33

@吴瑞祥: 要不,麻烦你新建一个web api的post带参请求和不带参请求的demo呗

支持(0) 反对(0) GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 15:36
0

就是修改一下路由,该死的问题搞了我好几天,可能是因为刚接触这一块吧,对路由没大理解,要是PHP就很好弄,直接POST["user"]就可以了

 config.Routes.MapHttpRoute(
                name: "Invite",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { controller = "Invite", action = "Post", id = RouteParameter.Optional }
            );

参考链接

http://www.ityouzi.com/archives/2330.html

GhostClock | 园豆:204 (菜鸟二级) | 2016-11-15 15:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册