我有2个项目,一个是前端(AngularJS),一个是后端(C#Web-Api)。问题是,当前端查询api时(例如GET localhost / api / Especialistas?rol = XXXX),我得到500错误。以下是API的代码:
public IHttpActionResult GetEspecialista(string rol)
{
Especialista especialista = db.Especialistas.First( e=> e.Rol == rol);
if (especialista == null)
{
return NotFound();
}
return Ok(especialista);
}
API正在运行,因为我到达了return Ok(especialista)
。
前端正在使用此Restangular
来查询API
Restangular.one("Especialistas?rol=XXXX").get()
网络控制台显示请求200 OK OPTION
,但500 Internal Server Error GET
。
我在WebApiConfig.cs文件中尝试了一个消息处理程序,以检查GET请求是否到达Api,并且确实已到达它,所以我不知道发生了什么,因为我没有更改任何配置文件。
如何解决此问题的任何线索将不胜感激,谢谢。
答案 0 :(得分:1)
如果您的操作成功调用,但仍然收到500错误,我认为错误是在转换为HTTP响应时通过序列化especialista
对象创建的。
最有可能的是,序列化失败是因为某些导航属性会在对象图中创建循环。建议返回简单对象,而不是实体框架模型。
尝试以下方法:
var retObj = new { Prop1 = especialista.Prop1, Prop2 = especialista.Prop2 };
return Ok(retObj);
如果以上代码有效,我建议创建应根据您的数据模型填充的服务模型“镜像”对象。应返回这些对象而不是数据模型。
避免属性值赋值的样板代码的好帮手是Automapper。