我看到有很多人在努力解决同样的问题,但似乎没有人能引导我朝着正确的方向前进 - 也许我没有正确理解,或者我的情况有点不同 - 我创建了一个运行完美的MVC应用程序在我的本地,但一旦部署,我在控制台中收到以下错误:
无法加载资源:服务器响应状态为404 (未找到):glyphicons-halflings-regular.woff2
无法加载资源:服务器响应状态为404 (未找到):/ api / notifications
无法加载资源:服务器响应状态为500 (内部服务器错误) : ?BudgetingTool /帐户/的UserDetails SEARCHTERM =彼得+平移和安培; _ = 1506510511716
最后一个是最重要的,因为它用于返回数据。其代码如下:
public ActionResult UserDetails(string searchTerm = null)
{
var data = UserManager.Users.FirstOrDefault(r => (r.FirstName + " " + r.LastName) == searchTerm);
IEnumerable<SelectListItem> rolesList = null;
IEnumerable<SelectListItem> organisationList = null;
Organisation organisation = null;
Department department = null;
if (data != null)
{
var userOrganisations = _organisationRepo.GetUserAssignedOrganisation(data.Id);
organisation = _repository.FindOrganisationById(data.OrganisationId);
department = _departmentRepo.FindDepartmentById(organisation.DepartmentId);
rolesList = ShowAllowedRoles(data.Id);
organisationList =
_repository.GetOrganisationsInHierarchyOrder(0,0,0).Select(r => new SelectListItem
{
Selected = userOrganisations.Any(x => x.OrganisationId == r.OrganisationId) ? true : false,
Text = r.Name,
Value = r.OrganisationId.ToString()
});
//SelectedOrganisations = OrganisationList.Where(x => x.Selected == true).ToList().Select(r=> new List<string>{ r.Value});
}
else
{
organisationList = _repository.GetOrganisationsInHierarchyOrder(0, 0, 0).GroupBy(m => m.Name).Select(y => y.First()).Select(r => new SelectListItem
{
Selected = false,
Text = r.Name,
Value = r.OrganisationId.ToString()
});
rolesList = GetRolesList();
}
var model = new UpdateUserInfoVM
{
Id = data == null ? string.Empty : data.Id,
FirstName = data == null ? string.Empty : data.FirstName,
LastName = data == null ? string.Empty : data.LastName,
Email = data == null ? string.Empty : data.Email,
Allowbudgetdeletion = data?.Allowbudgetdeletion ?? false,
LockoutEnabled = data?.LockoutEnabled ?? false,
//OrganisationId = data == null ? string.Empty : data.OrganisationId,
OrganisationId = data?.OrganisationId ?? 0,
Organisations = organisationList,
Roles = rolesList,
AccessFailedCount = data?.AccessFailedCount ?? 0,
LockoutEndDateUtc = data?.LockoutEndDateUtc,
AllowEditing = data.AllowEditing,
DistrictOrUrban = data?.DistrictOrUrban,
departmentId = organisation.DepartmentId,
DepartmentType = department.Name
//SelectedOrganisations = SelectedOrganisations
};
return PartialView("_ShowUserInfo", model);
//return Request.IsAjaxRequest() ? PartialView("_ShowUserInfo", model) : PartialView("_ShowUserInfo", model);
}
当我在控制台中单击错误的链接时,显示的是什么(好像没有值传递???
>'/ BudgetingTool'应用程序中的服务器错误。对象引用未设置为对象的实例。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.NullReferenceException:不是对象引用 设置为对象的实例。
我只是不明白它如何在我的本地工作如此完美,但在发布时却没有,然后部署到远程服务器。
该文件夹是一个虚拟目录,包含项目文件的文件夹与“Everyone”和“IIS_IUSR”共享 - 两者都具有读/写权限。
人们可以寻找的最一般的东西是什么?我确定它的东西如此简单,但却无法弄清楚它是什么:(
任何正确方向的帮助都会有很大的帮助。
谢谢!
答案 0 :(得分:0)
在DevOps中有一句话:“它不起作用,除非它在你的开发机器之外的其他地方工作”。在这里,您的代码未通过该测试。开发盒是一个原始的环境,你可以准确地设置它,并确保你的本地数据库具有绝对正确的数据等。现实世界的宽容度要低得多,当你从数据库中查询事物时如果你没有正确编码,你的生产环境会很好。
也就是说,每当您从数据库中查询某些内容时,您必须考虑您未查找的内容。即使它应该在那里,墨菲定律说它不会在某个时候。当您的查询没有返回任何内容时,该变量将被设置为null,如果您没有在代码中进行正确的空值检查,那么您将得到NullReferenceException
这样的内容。
简单地说,NullReferenceException
意味着您试图访问类型实例的有效成员,但该实例实际上被评估为null,而null没有该特定成员。例如:
organisation = _repository.FindOrganisationById(data.OrganisationId);
department = _departmentRepo.FindDepartmentById(organisation.DepartmentId);
在这里,您假设Organization
实例存在,但很可能不存在。如果您有organization.DepartmentId
的实例,则尝试检索Organization
的值是完全有效的,但如果您的organization
变量实际上为null,那么null,则没有{{1}成员和繁荣:DepartmentId
。
任何时候你有任何可能为null的变量,假设它会相应地设计你的代码。