有时发布后的 ASP.Net 404

Posted

技术标签:

【中文标题】有时发布后的 ASP.Net 404【英文标题】:ASP.Net 404 After Publish Sometimes 【发布时间】:2017-01-26 16:03:27 【问题描述】:

我有一个在本地运行良好的 MVC 项目。将其发布到开发环境时,我们遇到了一个问题,我们在其中一个页面上得到 404。奇怪的是,这只是偶尔发生,我们通常可以通过再次发布来修复它,直到它消失。只有一页会抛出错误。

到目前为止,我们尝试的是:

在工作和损坏状态下获得项目 dll 的副本。当它处于错误状态时复制工作的 dll 似乎可以解决问题。然而,当我们比较这两个 dll 时,它们完全一样,没有任何区别。

我们检查了 IIS 日志,没有任何异常错误可以指出原因。

在这一点上有点难过。就像我说的那样,我们有一个修复,但在这一点上寻找一些安心。有人对看什么有任何想法吗?

这是索引操作

public ActionResult Index()
                
        localAdmin = false;
        if (!UoW.IsStarted)
        
            UoW.Start();
        
        if (SSDSession.PolicyID > 0)
        
            policyId = SSDSession.PolicyID;
            return SetPolicyInfo();
        
        if (Request.Cookies.Get("policyId") != null)
        
            policyId = Convert.ToInt32(Request.Cookies.Get("policyId").Value);
            SSDSession.PolicyID = policyId;
        
        if (policyId == -1 && SSDSession.User.IsPolicyHolder)
                        
            policyId = bobDao.GetPoliciesByOwnerPartyId(SSDSession.User.PartyID).First().PolicyId;
            SSDSession.PolicyID = policyId;
            return SetPolicyInfo();
        
        if (policyId == -1)
        
            if (!System.Web.HttpContext.Current.Request.IsLocal)
            
                return Redirect("/core/PolicySearch.aspx");
            
            else
            
                policyId = 244;
                SSDSession.PolicyID = policyId;
                localAdmin = true;
                return SetPolicyInfo();
            
        
        else
                        
            return SetPolicyInfo();
        

这是它最后调用的函数

private ActionResult SetPolicyInfo()
    
        if (!UoW.IsStarted)
        
            UoW.Start();
        
        PolicyOverviewModel polOvModel = new PolicyOverviewModel();
        polOvModel.PoliciesSummaries = PopulatePolicies();
        polOvModel.Policy = _policyDataService.GetPolicyById(policyId);
        polOvModel.PolicyStatements = polOvModel.Policy.PolicyDocuments.Where(x => x.DocumentType == Core.Acord.Enumeration.DocumentType.POLICY_STATEMENT)
            .OrderByDescending(x => x.DateCreated).Take(5);
        polOvModel.PolicyPerformance = _policyDataService.GetPolicyPerformance(policyId, SSDSession.CycleDate);
        polOvModel.SettledEvents = _policyDataService.GetRecentSettledEvents(policyId, null);
        polOvModel.PendingEvents = _policyDataService.GetRecentPendingEvents(policyId, null);
        polOvModel.EventDocId = new List<int>();
        polOvModel.PolicyID = policyId.ToString();
        foreach (SettledEvent setEvent in polOvModel.SettledEvents)
        
            var settlementDoc = _policyDataService.GetEventConfirmationDocumentByFileName(setEvent.PolicyID, setEvent.EventQueueID.ToString());
            if (settlementDoc != null)
            
                polOvModel.EventDocId.Add(settlementDoc.ID);
            
            else
            
                polOvModel.EventDocId.Add(-1);
            
        
        return View("Index",polOvModel);
    

【问题讨论】:

你是不是一直检查发布包里的所有文件夹都报错 是的。 404 出现在执行某个控制器的索引操作时。索引视图就在那里,所有代码都在 dll 中以引导它。我们找不到任何丢失的东西。 您的代码中是否有任何极端情况会返回错误的视图 URL。可以分享一下动作方法代码吗 添加了该代码。 404是否有可能是由于policysearch.aspx 【参考方案1】:

我发现了问题。

我在服务器上获取了一份完整文件夹结构的副本,其中包括工作状态和损坏状态。经过比较我们发现有时 Visual Studio 只是不会发布参考 DLL。不知道为什么会出现这个问题,但我们发现该引用没有必要并解决了它。现在我们已经发布了 10 多次,并且没有发生错误。

【讨论】:

以上是关于有时发布后的 ASP.Net 404的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 性能分析 404/500 错误

在 ASP.NET 中实现 404 的最佳方法

ASP.NET/IIS:所有文件类型为 404

ASP.NET MVC 404 错误处理 [重复]

ASP.NET MVC:404 - 找不到文件或目录。您正在寻找的资源

如何从 asp.net 处理程序返回 404 错误?