我使用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; }
}
}
请有经验的人来帮助我,非常感谢。
答案 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是否具有正确的值