将 MVC 应用程序部署到服务器后,JQuery 文件 404(未找到)和 500(内部服务器错误)

Posted

技术标签:

【中文标题】将 MVC 应用程序部署到服务器后,JQuery 文件 404(未找到)和 500(内部服务器错误)【英文标题】:JQuery File 404 (Not Found) and 500 (Internal Server Error) after deploying MVC app to Server 【发布时间】:2018-03-08 20:39:48 【问题描述】:

我看到很多人都在为同样的问题而苦苦挣扎,但似乎没有人将我引向正确的方向 - 也许我没有正确理解,或者我的情况有点不同 - 我创建了一个运行完美的 MVC 应用程序在我的本地,但一旦部署,我在控制台中收到以下错误:

加载资源失败:服务器响应状态为 404 (未找到):glyphicons-halflings-regular.woff2

加载资源失败:服务器响应状态为 404 (未找到):/api/notifications

加载资源失败:服务器响应状态为 500 (内部服务器错误) : BudgetingTool/Account/UserDetails?searchTerm=Peter+Pan&_=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”共享 - 两者都具有读/写权限。

人们可以寻找的最普遍的东西是什么?我确定它很简单,但就是不知道它是什么:(

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

谢谢!

【问题讨论】:

至少对于“woff2”文件,这肯定是 IIS 配置中缺少/错误的 mime 类型的问题:***.com/a/28955302/265165 您的 NullReferenceException 是另一个问题的根源。可能某些查询没有返回预期的数据,这可能是与数据库的连接错误、缺少权限、迁移失败等。我们无法猜测出什么问题。启用异常日志记录以在日志中查找错误 感谢您的回复 - 我尝试将其添加到我的 web.config 中,但没有任何区别 :( 浏览器上是否有异常日志记录?如何启用此功能以及在哪里可以找到日志? 服务器上出现异常。登录 ASP.NET 是一个单独的主题,我不能在这里提供任何详细信息(这里和那里,建议使用名为 ELMAH 的工具来轻松获取更多详细信息,但是是的,只需 google 即可)。 谢谢!所以我觉得有点愚蠢......第3点的问题实际上是因为数据问题。我将数据库从服务器上拉下来,并在我的本地开发中使用它,并发现我使用的不正确(这是因为以前应该删除的现有数据)。至于其他两点,我还是有点难过。但是,感谢您尝试提供帮助。 (难怪找到的其他链接都不起作用:-/) 【参考方案1】:

在 DevOps 中有一句谚语说:“它不起作用,除非它在你的开发机器之外的其他地方工作”。在这里,您的代码未通过该测试。开发盒是一个原始环境,您可以准确地设置它应该是什么,并确保您的本地数据库具有绝对正确的数据等。现实世界的宽容度要低得多,当您执行诸如从数据库中查询事物之类的事情时,如果您没有正确编码,您的生产环境会很好。

也就是说,每当您从数据库中查询某些内容时,您都必须考虑到您所查询的内容未被找到。即使它应该在那里,墨菲定律说它不会在某个时候出现。当您的查询没有返回任何内容时,该变量将被设置为 null,如果您没有在代码中进行正确的 null 检查,您将得到像这样的NullReferenceExceptions。

简单地说,NullReferenceException 意味着您尝试访问类型实例的有效成员,但该实例实际评估为 null,并且 null 没有该特定成员。例如:

organisation = _repository.FindOrganisationById(data.OrganisationId);
department = _departmentRepo.FindDepartmentById(organisation.DepartmentId);

在这里,您假设 Organization 实例存在,但很可能不存在。如果您有 Organization 的实例,尝试检索 organization.DepartmentId 的值是完全有效的,但如果您的 organization 变量实际上为 null,那么 null 没有 DepartmentId 成员和繁荣:@987654329 @。

任何时候你有任何可能为空的变量,假设它会是,并相应地设计你的代码。

【讨论】:

我实际上会将你的答案标记为答案 - 因为正如我现在在我的帖子的评论中提到的那样,它与数据相关 - 顺便说一句,错误恰好发生在 _departmentRepo.FindDepartmentById ' 代码行。至于其他 2 项,我只需要检查返回的 URL,我确定这就是为什么找不到它们....我希望。谢谢@Chris!

以上是关于将 MVC 应用程序部署到服务器后,JQuery 文件 404(未找到)和 500(内部服务器错误)的主要内容,如果未能解决你的问题,请参考以下文章

部署到 Web 服务器后 MVC Null 异常

将 Rails 应用程序部署到 Heroku 后,不显示 JQuery 函数中的图像

将 MVC 应用程序部署到 Azure 应用程序服务时出现 POSTS 问题

在 ASP.net MVC 5 应用程序中单击按钮时使用 JavaScript/jQuery 将用户重定向到页面

将站点部署到 IIS 服务器

将 ASP.NET MVC NHibernate 应用程序部署到 IIS7 时出错