Asp.net core 如何解决“a”问题;“未找到视图”;asp.net核心mvc项目中的异常
我正在尝试使用VS代码创建一个在OSX上运行的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();
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?}");
});
}