Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何解决“a”问题;“未找到视图”;asp.net核心mvc项目中的异常_Asp.net Core - Fatal编程技术网

Asp.net core 如何解决“a”问题;“未找到视图”;asp.net核心mvc项目中的异常

Asp.net core 如何解决“a”问题;“未找到视图”;asp.net核心mvc项目中的异常,asp.net-core,Asp.net Core,我正在尝试使用VS代码创建一个在OSX上运行的ASP.NET核心MVC测试应用程序。 访问默认主/索引(或我尝试的任何其他视图)时,我遇到“未找到视图”异常 这是启动配置 public void Configure(IApplicationBuilder app) { // use for development app.UseDeveloperExceptionPage(); app.UseDefaultFiles();

我正在尝试使用VS代码创建一个在OSX上运行的ASP.NET核心MVC测试应用程序。 访问默认主/索引(或我尝试的任何其他视图)时,我遇到“未找到视图”异常

这是启动配置

    public void Configure(IApplicationBuilder app) {

        // use for development
        app.UseDeveloperExceptionPage();
        app.UseDefaultFiles();
        app.UseStaticFiles();

        app.UseMvc( routes => {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}"
            );
        });
    }
我在
Views/Home/index.cshtml
中定义了视图,project.json中包含了以下包

"dependencies": {
"Microsoft.NETCore.App": {
  "version": "1.0.0-rc2-3002702",
  "type": "platform"
},
"Microsoft.AspNetCore.Razor.Tools" : "1.0.0-preview1-final",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Routing": "1.0.0-rc2-final"
},
最后,这是我得到的一个例外

System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
    /Views/Home/Index.cshtml
    /Views/Shared/Index.cshtml
    at Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable`1 originalLocations)
    at Microsoft.AspNetCore.Mvc.ViewResult.<ExecuteResultAsync>d__26.MoveNext()
    --- End of stack trace from previous location where exception was thrown --- ...
System.InvalidOperationException:未找到视图“索引”。搜索了以下地点:
/Views/Home/Index.cshtml
/视图/Shared/Index.cshtml
在Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful中(IEnumerable`1 originalLocations)
在Microsoft.AspNetCore.Mvc.ViewResult.d_u26.MoveNext()上
---来自引发异常的上一个位置的堆栈结束跟踪---。。。
对我可能遗漏的内容有什么建议吗?

回复@LukaszDev(我想我不能在评论中附加图片) 我的视图是Index.cshtml,是我这边的打字错误。见附件截图

我的控制器尽可能简单。对于Index和Welcome,我都会得到相同的错误

using Microsoft.AspNetCore.Mvc;

namespace app1 {

    [Route("[controller]")]
    public class HomeController : Controller {

        // default action, configured in Startup.cs route
        public IActionResult Index() {
            // handles route /home
            return View();
        }

        [Route("welcome")]
        public IActionResult WelcomeActionDoesNotHaveToMatchName() {
            // handles router /home/welcome
            return View("Welcome"); 
        }
    }
}

我找到了这件丢失的东西。我最终在VS2015中创建了一个ASP.NET核心项目,然后比较了它们之间的差异。原来我在main中的
WebHostBuilder
中缺少
.UseContentRoot(Directory.GetCurrentDirectory())

添加此项后:

public static void Main(string[] args)
{
    new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseStartup<Startup>()
        .Build()
        .Run();
}

我必须在project.json中添加以下内容:

"publishOptions": {
    "include": [
        "wwwroot",
        "**/*.cshtml",
        "appsettings.json",
        "web.config"
    ]
},

对于任何挣扎于此的人来说,我有一个不同于上述所有问题的问题。 我的本地版本运行良好,但现场生产版本出现了此错误。结果表明,Unix文件名与Windows中显示的文件名不同

Git有一个默认启用的讨厌的设置:core.ignorecasegit(您可以在命令行上使用
config--get core.ignorecase
检查此设置)


解决方案是将文件重命名为其他文件(例如xxx.cs),提交并推送,然后使用正确的大小写将其重命名回原始文件,然后再次提交并推送。

我在构建Identity Server实例时遇到了同样的问题,如果我从VisualStudio运行该项目,一切都很好,但是在发布该项目并使用
dotnet
命令运行之后,当Identity Server尝试提供登录视图时,我遇到了“View not found”错误。我已经验证了这里提到的所有其他内容,但仍然不起作用。我终于发现问题出在如何运行
dotnet
命令上。我从父文件夹运行它,比Identity Server实例高一级,这影响了内容根路径,例如,运行

dotnet myWebFolder/MyIdentityServer.dll
Identity Server启动时为我提供了以下输出:

因此,在本例中,我的dll的完整路径是C:\inetpub\aspnetcore\myWebFolder\MyIdentityServer.dll,我从C:\inetpub\aspnetcore\folder运行了
dotnet
命令

要获得正确的内容根目录,我必须确保从dll所在的同一文件夹中运行
dotnet
命令,如“dotnet MyIdentityServer.dll”。这一变化给了我以下输出:


现在,我的内容根路径正确,Identity Server在C:\inetpub\aspnetcore\myWebFolder\views\Account\Login.cshtml中找到登录视图。我正在使用VS2017。在我的例子中,视图文件位于正确的位置(使用正确的名称)。然后我想起我以前重命名过它(而VS不知何故没有问我是否想像往常一样更改所有引用)。因此,我最终删除了该视图,然后再次创建它,这解决了我的问题。

FWIW,在我们的例子中,我们在访问
localhost:/graphql
时收到此错误,即使
view/graphql/Index.cshtml
位于正确的位置。我们得到错误是因为
wwwroot/bundle.js
wwwroot/style.js
最初没有被错误提交,因为我们的
.gitignore
包含
wwwroot
。通过检查网络流量发现了它,并看到是这些文件提供了404,而不是
Index.cshtml
本身。

在我的例子中,构建操作以某种方式更改为嵌入式资源,它不包含在已发布的文件中

嵌入式资源
更改为
内容
可以解决我的问题


dotnet 2.2.300版的可视化代码给出了错误消息,因此不是运行时异常


我的控制器是从ControlerBase而不是controller派生的。因此,我不得不将ControllerBase更改为Controller。

我刚从.net core 2.2升级到3。我找到了两种解决方法:

在配置mvc时调用AddRazorRuntimeCompilation(),如:

services.AddControllersWithViews()
    .AddRazorRuntimeCompilation(...);
更多信息请点击此处:

或从.csproj中删除以下行:

<RazorCompileOnBuild>false</RazorCompileOnBuild>
<RazorCompileOnPublish>false</RazorCompileOnPublish>
false
假的

检查您的.csproj文件。确保您的文件没有像以下那样列出:

<ItemGroup>
   <Content Remove="Views\Extractor\Insert.cshtml" />
   <Content Remove="Views\_ViewImports.cshtml" />
</ItemGroup>

如果上面列出了它,请删除您需要的。
有时,当我们右键单击并将构建设置更改为编译时会发生这种情况。

我的情况是,这只是一个“忘记”错误…
我的视图文件夹名称与控制器名称不同。

将文件夹重命名为正确的名称。。如果要将项目从控制台应用程序移植到web应用程序,则需要在
.csproj
文件中更改此行

发件人:


致:


在我从Core 2.2迁移到3.1之后,找不到静态html文件。在我的startup.cs文件中,我必须在
app.usesticfiles()
之前添加
app.usedaultfiles()
,才能使其正常工作。比如说:

public void ConfigureServices(IServiceCollection services)
{
   .
   .
   .
   services.AddControllersWithViews();
   .
   .
   .
}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   .
   .
   .
   app.UseDefaultFiles();
   app.UseStaticFiles();
   app.UseRouting();
   .
   .
   .
   app.UseEndpoints(endpoints =>
   {
          endpoints.MapControllerRoute(
          name: "default",
          pattern: "{controller=Home}/{action=Index}/{id?}");
   });
}

在我的例子中,问题来自于我在csproj中设置的
false
,我在Ubuntu Linux上遇到了这个错误,并试图从
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk.Web">
public void ConfigureServices(IServiceCollection services)
{
   .
   .
   .
   services.AddControllersWithViews();
   .
   .
   .
}


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   .
   .
   .
   app.UseDefaultFiles();
   app.UseStaticFiles();
   app.UseRouting();
   .
   .
   .
   app.UseEndpoints(endpoints =>
   {
          endpoints.MapControllerRoute(
          name: "default",
          pattern: "{controller=Home}/{action=Index}/{id?}");
   });
}