【问题标题】:WebApi Internal Server ErrorWebApi 内部服务器错误
【发布时间】:2016-11-30 14:58:28
【问题描述】:

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

任何有关如何解决此问题的线索将不胜感激,谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    尝试以下方法:

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

    如果上述代码有效,我建议创建服务模型“镜像”对象,这些对象应根据您的数据模型进行填充。应该返回这些对象而不是数据模型。

    避免属性值赋值的样板代码的好帮手是Automapper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多