【问题标题】:ASP.NET MVC 4 The resource cannot found errorASP.NET MVC 4 找不到资源错误
【发布时间】:2023-03-15 12:20:02
【问题描述】:

我有一个名为“AuditoriaController”的控制器,在 _Layout.vbhtml 我有一个指向该控制器的操作链接:

<li>@Html.ActionLink("Auditoria", "Index", "Auditoria")</li>

当我在视图中单击此链接时,我收到以下错误消息:

“/”应用程序中的服务器错误。

找不到资源。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。

请求的 URL:/Auditoria/

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.17929

在 AuditoriaController 我有这个代码:

Public Class AuditoriaController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Auditoria

    Function Index() As ActionResult
        Return View(AuditoriaDB.GetAllItems())
    End Function
End Class

这是我在 RouteConfig.vb 中的路线

Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

    routes.MapRoute( _
        name:="Default", _
        url:="{controller}/{action}/{id}", _
        defaults:=New With {.controller = "EscalaPrevisao", .action = "Index", .id = UrlParameter.Optional} _
    )
End Sub

用其他控制器不会发生这个问题。如果我使用这个网址:localhost:4802/Auditoria/Index,则不会发生错误。

谁能帮帮我?

【问题讨论】:

  • 请告诉我们您的路线。
  • 你为这个控制器添加了视图索引吗?
  • 我有视图索引。如果我访问 URL 上的视图:Auditoria/Index 我没有这个问题。
  • 您的代码看起来和工作正常。因此,导致您的问题的其他原因是您没有向我们展示的。您可以发布生成的html的相关部分吗?您是否使用任何影响路由的第三方组件、任何自定义 httphandler/module 任何使用链接操作的 JS?
  • 我只使用来自 ASP.NET MVC 4 的默认 JS 和 HttpHandler/Module。我不使用第三方组件,我只使用 NHibernate 和 Fluent NHibernate。您想查看索引视图 HTML 吗?还是 _Layout HTML?

标签: asp.net asp.net-mvc-4 server-error


【解决方案1】:

当控制器类名不符合预期时返回 404。

将“Home”默认类重命名为“Home1”,您将看到完全相同的错误。验证没有错别字...几乎可以保证是这样。

【讨论】:

  • 我在项目的根目录中有另一个名为“Auditoria”的文件夹,所以会发生此错误。我将文件夹名称更改为“AuditoriaDb”,问题就解决了。
【解决方案2】:

转到 Web 项目的项目属性页面并选择 Web 选项卡。 在“开始操作”部分,将其设置为“特定页面”,但将文本框留空。

【讨论】:

  • 或者对我来说有效:Default/Home 只有关键字/名称而不是物理路径,例如 view(folder name)/Default/Home.chtml,前两个关键字完全可以完成工作,我想知道它最初没有在哪里设置以及为什么@junaid 将其设置为空并且它确实有效......无论如何它对我有用,所以感谢 + 1 导致问题的根源!
  • 虽然在我的 iis 中它并没有遵循这一点......所以仍然存在问题,因为它适用于 vs2010 开发服务器,而不是在现实生活中调试时......
【解决方案3】:

尝试重写 Global.Asax.cs 中 Application_BeginRequest() 事件中的 URL

        protected void Application_BeginRequest()
    {
        var originalPath = HttpContext.Current.Request.Path.ToLower();
        if (originalPath.Equals("/"))
        {
            Context.RewritePath("Controller/Action");
        }

    }

不是一个理想的解决方案,但它可以作为临时解决方案。

【讨论】:

    【解决方案4】:

    我的控制器的命名空间不正确(来自移动文件)。修复命名空间后,一切正常。

    【讨论】:

      【解决方案5】:

      我点击红色突出显示的复选框,一切正常

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多