2016-11-30 20 views
0

我有2个项目,一个前端(AngularJS)和一个后端(C#Web-Api)。问题是,当前端查询api(例如GET localhost/api/Especialistas?rol = XXXX)时,出现500错误。这里是API的代码:WebApi内部服务器错误

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,并且确实达到了它,所以我不知道发生了什么,因为我没有更改任何配置文件。

任何线索如何解决这个问题将不胜感激,谢谢。

回答

1

如果您的操作被成功调用,但仍然收到500错误,我认为该错误是由转换为HTTP响应时序列化的especialista对象创建的。

很可能,序列化失败的原因是某些导航属性会在对象图中创建循环。建议返回简单的对象,而不是实体框架模型。

尝试以下操作:

var retObj = new { Prop1 = especialista.Prop1, Prop2 = especialista.Prop2 }; 
return Ok(retObj); 

如果上面的代码工作,我建议建立的服务模式,应根据您的数据模型来填充“镜子”的对象。应该返回这些对象而不是数据模型。

避免物业价值分配的样板代码的好帮手是Automapper

+0

就是这样,谢谢! – CamiloR