代码如下
我的代码如下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请求就是不行
将[FromBody]去掉!
不行,还以一样值为null
@GhostClock: 那你好好看看诺,估计是前台参数传递有问题
@JeffckyWang: 但是为什么我GET请求都可以呢?这这个GET请求不管是带参还是不带参,都可以得到前台传过来的参数,就POST,PUT,DELETE请求获取不到
提交数据的时候用raw,然后选application/json,数据要用同Invite相匹配的json字符串。
我是用postman提交的数据呀,就是post请求传不过去呀
@GhostClock: 我没说你没用post好么,我说你没有用raw和对应的序列化格式。
认真看我的回答好么?不懂一共几十个字,你跳过了几个字。
@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
学写api第一步:看请求报文.谷歌浏览器按F12
我是用postman提交的数据呀,就是post请求传不过去呀
@GhostClock: 那你把报文发上来让大家看看有什么问题.
@吴瑞祥: 疑问,我们明明是POST请求,这里的Allow为什么是GET??
@GhostClock: 这是响应报文啊大爷...让你发请求报文.而且听我一句.按F12看报文吧...等你有经验了.再来臆想报文什么样子..
@GhostClock: 或者你按code按钮切到http看他的请求报文也是可以的..
@吴瑞祥: 并看不出什么,还是405
@GhostClock: webapi默认只支持xml和json格式数据.不只是form表单格式
@吴瑞祥:
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
@吴瑞祥: 要不,麻烦你新建一个web api的post带参请求和不带参请求的demo呗
就是修改一下路由,该死的问题搞了我好几天,可能是因为刚接触这一块吧,对路由没大理解,要是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