C#的HttpResponseMessage发布API json格式

时间:2019-06-04 12:15:29

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

我使用HttpResponseMessage Post方法让移动终端验证帐户密码。我使用以下代码成功运行,但是POST格式必须这样运行。

'{"ID":"xxx","Password":"xxx"}'

需要两个'才能运行,我不知道为什么。 我无法在iOS或Android上使用常规POST格式请求服务。 我想要的格式是{"ID":"xxx","Password":"xxx"},不带'

  [HttpPost]

        public HttpResponseMessage Post([FromBody] string DATA)
        {
            using (appapidataEntities entities = new appapidataEntities())
            {
                //string controllerName = ControllerContext.RouteData.Values["controller"].ToString();
                JObject jo = JObject.Parse(DATA);
                string id = jo["ID"].ToString();
                string password = jo["Password"].ToString();
                var user = entities.USERs.Where(x => x.ID == id && x.Password == password).FirstOrDefault();
                var result = new
                {
                    message = "failure"
                };
                var result2 = new
                {
                    message = "success"
                };

                if (user == null)
                {
                    return Request.CreateResponse(HttpStatusCode.OK, result);
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.OK, result2);
                }
            }
        }
public partial class USER
   {
       public string ID { get; set; }
       public string Password { get; set; }
   }
}

请有经验的人来帮助我,非常感谢。

1 个答案:

答案 0 :(得分:0)

正如@Nkosi所说,接收复杂对象的正确方法是使用类/对象(也称为“模型绑定”)

在模型中添加此类。此类将是服务与调用该服务的任何外部应用程序之间的“合同”。通常,任何客户端(服务,应用程序或前端)也具有此类合同来调用该服务。

public class LoginViewModel {
   public string ID  { get; set; }
   public string Password  { get; set; }
}

现在,按如下所示修改控制器

[HttpPost]
public HttpResponseMessage Post([FromBody] LoginViewModel DATA) {
   using (appapidataEntities entities = new appapidataEntities())           
        string id = DATA.ID;
        string password = DATA.Password;

       // rest of the code
   }
}

确保设备正在发送服务正在等待的数据(如果要在发出请求之前从Android Studio进行调试,则可以添加断点),并在控制器中添加断点以验证变量DATA是否具有正确的值