将MVC应用程序部署到服务器

时间:2017-09-27 11:15:27

标签: jquery asp.net-mvc iis-7

我看到有很多人在努力解决同样的问题,但似乎没有人能引导我朝着正确的方向前进 - 也许我没有正确理解,或者我的情况有点不同 - 我创建了一个运行完美的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”共享 - 两者都具有读/写权限。

人们可以寻找的最一般的东西是什么?我确定它的东西如此简单,但却无法弄清楚它是什么:(

任何正确方向的帮助都会有很大的帮助。

谢谢!

1 个答案:

答案 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的变量,假设它会相应地设计你的代码。