在我的本地服务器上它返回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
查看例外情况答案 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,因此必须修复代码。