我正在开发一个 REST API,当我尝试通过 HTTP-POST 访问时遇到问题。
在我的项目中,在“ApiAreaRegistration”中我有这个定义:
context.MapRoute(
"AccesoRegistro",
"Api/Registros/Registro/{email}/{fecha}",
new
{
controller = "Registros",
action = "Registro",
email = UrlParameter.Optional,
fecha = UrlParameter.Optional
}
);
“email”和“fecha”是可选参数。
在 mi“RegistroController”中,我定义了:
public JsonResult Registro(int? id, Registro reg)
{
switch (Request.HttpMethod)
{
case "POST":
return Json(registroManager.InsertarRegistroComidas(reg));
case "GET":
return Json(registroManager.ObtenerRegistros(reg.email, reg.fecha),
JsonRequestBehavior.AllowGet);
}
return Json(new { Error = true, Message = "Operación HTTP desconocida" });
}
我只想做 POST 和 GET 方法。我正在使用名为“RESTED”的 Firefox 插件进行测试,当我使用 HTTP-GET 时,它工作正常。我使用 Get 方法访问 REST:http://localhost:puerto/Api/Registros/registro/email/12-12-2000。REST 返回一个预期值。
如果我尝试执行http://localhost:puerto/Api/Registros/registro的 HTTP-POST (不带可选参数),服务器会返回 404 错误:“找不到资源”。我在 Controller 方法中设置了一个断点,在 switch() 语句中,当我尝试使用 HTTP-POST 访问时,永远不要执行这个方法。
public JsonResult Registro(int? id, Registro reg)
{
switch (Request.HttpMethod) <-- Here i set the breakpoint
{
case "POST":
return Json(registroManager.InsertarRegistroComidas(reg));
case "GET":
return Json(registroManager.ObtenerRegistros(reg.email, reg.fecha),
JsonRequestBehavior.AllowGet);
}
return Json(new { Error = true, Message = "Operación HTTP desconocida" });
}
我尝试通过这样的方法定义设置 [HttpPost]:
[HttpPost]
public JsonResult InsertarRegistro(Registro reg)
{
return Json(registroManager.InsertarRegistroComidas(reg));
}
我在 ApiAreaRegistration 中定义了这种方式:
context.MapRoute(
"AccesoInsertarRegistro",
"Api/InsertarUnRegistro",
new
{
controller = "Registros",
action = "InsertarRegistro",
}
);
在 RESTED 中,如果我使用http://server:port/api/insertarunregistro使用我需要的所有参数进行 HTTP-POST ,则执行方法“InsertarRegistro”但“Registro reg”的参数为空,我有 5此类中的属性,并且全部为空。
一种方式返回 404,另一种方式返回空参数...我能做什么?我做错了什么?
