ASP.NET MVC 页面无法加载并显示“找不到资源”

Posted

技术标签:

【中文标题】ASP.NET MVC 页面无法加载并显示“找不到资源”【英文标题】:ASP.NET MVC Page Won't Load and says "The resource cannot be found" 【发布时间】:2010-10-27 23:18:43 【问题描述】:

我在尝试打开我的 ASP.NET MVC 应用程序时遇到问题,但我得到了 ASP.NET 错误页面,上面写着:

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

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

请求的 URL:/EventScheduler/account.aspx/login

版本信息:Microsoft .NET Framework 版本:2.0.50727.3053; ASP.NET 版本:2.0.50727.3053**

我正在使用这篇博文中的 URL 技巧,这就是为什么我在 URL 中有 .aspx:

http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

它可以在我的其他沙盒服务器(不是开发机器)上运行,现在我只是将它作为一个新的虚拟目录部署到我的生产站点,但由于某种原因,它似乎实际上是在寻找一个 .aspx 文件。

有什么想法吗?我想我一定是忘记了一步。

【问题讨论】:

【参考方案1】:

我在构建时遇到了同样的错误。默认使用 URLRoute 设置进行导航。如果通过右键单击任何 cshtml 页面选择“设置为启动页面”属性,则会引发此错误,因为 Global.asax 文件下始终存在到当前页面的路由。

查看启动路径的项目属性并将其删除。

【讨论】:

【参考方案2】:

我找到了解决这个问题的方法,你不必删除 global.asax,因为它包含一些有价值的信息,可以让你的项目顺利运行,而是看看你的控制器的名字,在我的例子中,我的控制器被命名为 MyController.cs 并且在 global.asax 中它试图引用主控制器。

在全局 asax 中查找这一行

routes.MapRoute(
   "Default", // Route name
   "controller/action/id", // URL with parameters
   new  controller = "Home", action = "Index", id = UrlParameter.Optional  

在我的情况下,我必须这样才能工作

    new  controller = "My", action = "Index", id = UrlParameter.Optional 

【讨论】:

【参考方案3】:

确保您没有告诉 IIS 在提供文件之前检查并查看文件是否存在。这个已经咬了我好几次了。执行以下操作:

打开 IIS 管理器。右键单击您的 MVC 网站,然后单击属性。打开虚拟目录选项卡。单击配置...按钮。在通配符应用程序映射下,确保您具有到 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 的映射。确保未选中“验证文件是否存在”!

【讨论】:

是的,确实如此。最小字符长度很糟糕。 我试过这个,Windcard 应用程序地图没有。我添加了,确保取消选中“验证文件存在”复选框,但我仍然遇到同样的问题。 它不存在吗?听起来您需要做一些配置 IIS 的工作。不幸的是,这可能会让人头疼。我建议您返回为 MVC 配置 IIS 的教程,并逐步按照它们进行操作。问题不在 MVC 范围内;如果不是,您将收到有关无法找到路线或其他一些黄屏死机的错误消息。 当我右键单击一个站点时,我有基本设置或高级设置,没有“属性”。没找到。我应该去哪里看? (IIS 7.5) @JNF:此答案适用于 6,而不是 7。您通常不必在 7 中执行 任何操作 来支持无扩展路径。这很可能是配置问题。在服务器故障上询问它。或者,更有可能的是,删除该角色,然后使用microsoft.com/web/downloads/platform.aspx 正确安装所有内容。糟糕的服务器配置是一场噩梦。【参考方案4】:

如果您运行的是 IIS 6 及更高版本,请确保应用程序池您的 MVC 应用程序。正在使用设置为集成托管管道模式。我错误地将我的设置为 Classic 并且发生了同样的错误。

【讨论】:

你的意思是IIS7及以上。我在 IIS 6.0 中找不到任何地方来选择经典或集成托管管道模式。【参考方案5】:

您应该仔细检查您的路线值。

routes.MapRoute(
   "Default", // Route name
   "controller/action/id", // URL with parameters
   new  controller = "Home", action = "Index", id = UrlParameter.Optional  

在这种情况下,请确保您拥有“Home”控制器,因为如果没有带 Index Action 的 HomeController,应用程序将无法加载。就我而言,我有 HomesController,但我错过了 Home 前面的“s”。我修复了名称不匹配问题,这解决了我的本地环境和服务器上的问题。

【讨论】:

【参考方案6】:

找不到页面,因为关联的控制器没有退出。只需创建特定的控制器。如果您尝试显示主页并使用 Visual Studio 2015,请按照以下步骤操作:

    右键单击Controller文件夹,然后选择添加>控制器; 选择 MVC 5 控制器 - 空; 点击添加; 将 HomeController 作为控制器名称; 构建项目,然后再次运行项目

希望对你有帮助

【讨论】:

【参考方案7】:

有同样的问题,在我的情况下,原因是虚拟目录文件夹中缺少 web.config 文件。

【讨论】:

你能说清楚吗?我也有同样的问题 在 IIS 中发布应用程序时未复制 web.config 文件,并生成“找不到资源错误”,如果您想到该消息,这是有道理的。跨度> 【参考方案8】:

我在构建 MVC 应用程序时遇到了同样的错误。 就我而言,这是因为我忘记在我的控制器名称中添加字符串“Controller”。

错误

public class ProductType : BaseController

    public ProductType()
    
    

已解决

public class ProductTypeController : BaseController

    public ProductTypeController ()
    
    

【讨论】:

【参考方案9】:

在您的项目中打开 Global.asax.cs 然后右键单击 Method RouteConfig.RegisterRoutes(RouteTable.Routes);然后单击转到定义 然后在defaults: new controller = "Home", action = "Index", id =UrlParameter.Optional 然后将“Home”的名称更改为您自己的控制器名称并将索引更改为您自己的视图名称,如果您更改了除“HomeController”和“Index”之外的名称 希望您的问题能得到解决。

【讨论】:

【参考方案10】:

第 1 步:检查您是否收到以下更新? http://support.microsoft.com/kb/894670 如果你有,你可能想遵循这个程序,看看它是否适合你。它部分地为我工作。 它提到要删除的额外“/”的项目并不完全正确,但它确实让我对更改我的项目属性有所了解。 第 2 步:在您的 Solun 中右键单击 Web 项目的属性。 选择 WEB > 选择当前页面而不是特定页面。 第 3 步:进入您的项目,在其中保留 *.aspx 的选择起始页。 (应该与当前页面相同或选择另一个您选择的页面:)) 点击调试运行。

【讨论】:

对我来说这只是第 2 步。我右键单击了一个 .cshtml 页面并选择了 Dewelloper 提到的“设置为启动”,这会引发错误(我不知道为什么,必须是 Visual Studio 中的一个错误)。谢谢!【参考方案11】:

需要确保两件事:

1) Route 应该在 Global.ascx 文件中正确

2) 不要忘记在 Web Project 中添加 Controller Project 的引用(视图与控制器位于单独的项目中

第二个是我的情况。

【讨论】:

【参考方案12】:

假设从其他地方复制源代码。

有时,如果您在应用程序 url 中使用虚拟目录,例如:

http://localhost:50385/myapp/#/

没有路由会接收请求。

解决方案:

在项目文件中显式单击“创建虚拟目录”按钮。

【讨论】:

【参考方案13】:

在浏览器中右键单击--> 在浏览器中查看您想在浏览器中查看的任何页面。 这样和我一起工作。

【讨论】:

【参考方案14】:

经过数小时的调试,这只是我的 html 视图中的一个 c# 错误。 检查您的视图并追踪任何错误

不要使用html样式注释c#代码,即

【讨论】:

【参考方案15】:

打开您的Controller.cs 文件并在您的public ActionResult Index() 附近,在Index 的位置写下您要在浏览器中运行的页面的名称。对我来说是public ActionResult Login()

【讨论】:

【参考方案16】:

记得对 ActionResult 使用 PUBLIC:

public ActionResult Details(int id)

    return View();

而不是

 ActionResult Details(int id)
 
     return View();
 

【讨论】:

【参考方案17】:

你必须检查你是否在控制器中实现了页面 例如:

   public ActionResult Register()
        
            return View();
         

【讨论】:

【参考方案18】:

我遇到了类似的问题。但是我在本地使用 Episerver 并启用了 ssl。当我没有得到一个

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

我收到了不安全的连接错误。 最后,对我来说,PluralSight 上的这篇文章以及配置网站 url,相应地在项目配置上设置 ssl 链接,在管理员的Manage Website's 屏幕上解决了这个问题。

【讨论】:

【参考方案19】:

就我而言,我需要替换它:

@Html.ActionLink("Return license", "Licenses_Revoke", "Licenses", new  id = userLicense.Id , null)

有了这个:

<a href="#" onclick="returnLicense(event)">Return license</a>

<script type="text/javascript">
    function returnLicense(e) 
        e.preventDefault();

        $.post('@Url.Action("Licenses_Revoke", "Licenses", new  id = Model.Customer.AspNetUser.UserLicenses.First().Id )', getAntiForgery())
            .done(function (res) 
                window.location.reload();
            );
    
</script>

即使我不明白为什么。欢迎提出建议!

【讨论】:

【参考方案20】:

对我来说,它的解决方法如下:

发生这种情况的一个原因是您的 Web 项目属性下没有起始页或设置错误的起始页。这样做:

1- 右键单击​​您的 MVC 项目

2- 选择“属性”

3- 选择“网络”标签

4- 选择“特定页面”

假设您有一个名为 HomeController 的控制器和一个名为 Index 的操作方法,请在与“特定页面”单选按钮对应的文本框中输入“home/index”。

现在,如果您启动 Web 应用程序,它将带您进入由 HomeController 的 Index 操作方法呈现的视图。

【讨论】:

【参考方案21】:

它需要你添加一个 Web 表单,只需去添加属性 -> 新项目 -> Web 表单。然后你运行它,它会工作。简单

【讨论】:

【参考方案22】:

我在下面的脚本中遇到了同样的问题。问题是由 url 变量引起的。当我添加http://|web 服务器名称|/|应用程序名称|在 /Reports/ReportPage.aspx ... 它开始工作了。

<script>
    $(document).ready(function () 
        DisplayReport();
    );

    function DisplayReport() 
        var url = '/Reports/ReportPage.aspx?ReportName=AssignmentReport';

        if (url === '')
            return;
        var myFrame = document.getElementById('frmReportViewer');
        if (myFrame !== null) 
            if (myFrame.contentWindow !== null && myFrame.contentWindow.location !== null) 
                myFrame.contentWindow.location = url;
            
            else 
                myFrame.setAttribute('src', url);
            
        
    
</script>

【讨论】:

如果您提出的解决方案是将服务器/应用程序名称添加到 URL 的开头,那么您的代码 sn-p 是错误的且具有误导性。跨度> 好的同意。这就是我在控制器方面所做的: public class ReportsController : Controller public ActionResult Index(string ReportName) int i = Request.Url.AbsoluteUri.IndexOf("/Admin/Reports"); string reportUri = Request.Url.AbsoluteUri.Substring(0, i); reportUri += "/Reports/ReportPage.aspx?ReportName=" + ReportName;返回视图((对象)reportUri); 和视图端:@model 字符串函数 DisplayReport() var url = '@Model'; if (url === '') return;

以上是关于ASP.NET MVC 页面无法加载并显示“找不到资源”的主要内容,如果未能解决你的问题,请参考以下文章

如何显示在 Asp.net MVC 中找不到的图像

找不到静态图像的控制器路径? asp.net mvc 路由问题?

ASP.NET Core 2.2 MVC MapRoute 项目到 ASP.NET 3.0 端点 MapAreaControllerRoute “找不到此本地主机页面”

Asp.net mvc 问题将部分页面加载到引导模式中

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

自定义 ASP.NET MVC 404 错误页面的路由