asp.net web api内部服务器错误500

时间:2014-05-13 17:05:10

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

在我的本地服务器上它返回json但是当我将它发布到远程服务器时。我收到500内部服务器错误。

我无法在调试模式下运行托管网站,在本地主机上似乎没问题。远程服务器是IIS8.5 X-AspNet-Version:4.0.30319,我的本地IIS是iis 8

html响应是 500内部服务器错误。 您正在查找的资源存在问题,无法显示。

Api控制器

public class loginapiController : ApiController
{
    [System.Web.Http.HttpGet]
    public UserProjects UserProjects(int id)
    {
        return new UserProjects(id);
    }
}

public class UserProjects
{
    public IEnumerable<Project> Projects = new List<Project>();
    public List<Project> ExistingUserProjects = new List<Project>();
    public int UserId { get; set; }

    public UserProjects(int userId)
    {
        UserId = userId;
        var context = new AuditConnection();
        var existingProjectIds = context.UserProjects.Where(up => up.UserId == userId).Select(p => p.ProjectId);
        foreach (var id in existingProjectIds)
        {
            var project = context.Projects.Where(p => p.ProjectId == id).First();
            ExistingUserProjects.Add(project);
        }

        var proj = context.Projects.ToList();
        Projects = proj.Except(ExistingUserProjects);
    }
}

您可以使用此链接http://sentry.landsea.com.au/api/loginapi/UserProjects/4

查看例外情况

2 个答案:

答案 0 :(得分:0)

编辑:给出错误

  

“已经有一个与此命令关联的打开DataReader,必须先关闭它。”

我相信this answer会解释您的问题。你最好的选择是让你的读者在开始另一个命令之前完成第一个命令(你可以用ToList()执行此操作),或者将查询折叠为单个调用(我相信你可以通过将查询重构为一个使用SelectMany())的人。

请记住turning on MARS may be covering up a bigger problem,您应该在走这条路线之前完全理解它,特别是对于具有DbContext生命周期范围的Web应用程序,应将其设置为单个http请求的生命周期。如果你正确地手动处理你的上下文或者你正在使用依赖注入框架,那么这样做是微不足道的。

答案 1 :(得分:0)

对我来说,URL显示一条明确的错误消息:"Message":"There is already an open DataReader associated with this Command which must be closed first."您只能同时打开一个DataReader,因此必须修复代码。