Asp.net core 如何在MVC6中忽略路由
我正在开发一个非常简单的SPA风格的应用程序,我不想使用razor,所以我只需要它来提供HTML文件(来自wwwroot文件夹),js调用我的API控制器时除外。在WebAPI2中,您可以让路由器忽略HTML文件,以便直接为它们提供服务Asp.net core 如何在MVC6中忽略路由,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,我正在开发一个非常简单的SPA风格的应用程序,我不想使用razor,所以我只需要它来提供HTML文件(来自wwwroot文件夹),js调用我的API控制器时除外。在WebAPI2中,您可以让路由器忽略HTML文件,以便直接为它们提供服务 config.Routes.IgnoreRoute("Html", "{whatever}.html/{*pathInfo}"); 与此示例类似:IgnoreRoute功能是否未实现或已更改 现在如果我有app.UseMvc();在my Startup.cs中
config.Routes.IgnoreRoute("Html", "{whatever}.html/{*pathInfo}");
与此示例类似:IgnoreRoute功能是否未实现或已更改
现在如果我有app.UseMvc();在my Startup.cs中,对“/”的任何get请求都会导致此异常:
An unhandled exception occurred while processing the request.
InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml.
Microsoft.AspNet.Mvc.Rendering.ViewEngineResult.EnsureSuccessful()
但是当我不使用MVC时,它会在您请求“/”时提供index.html文件,显然我的API控制器无法工作。我想,即使启用了MVC选项,您是否也要提供index.html?如果是这样,您必须更改一个设置 当您启用MVC时,当您的url类似于
http://localhost:yourport
当您禁用MVC时,它将提供index.html,因为在这种情况下不存在路由
因此,如果您想在启用MVC时提供index.html,那么在使用MVC之前,在Configure函数中添加以下内容
app.UseDefaultFiles(new Microsoft.AspNet.StaticFiles.DefaultFilesOptions() { DefaultFileNames = new[] { "index.html" } });
// your UseMVC goes here.
我不明白你在评论app.UseMvc()时是什么意思。它工作正常,但web api当然不工作?在我的wwwroot文件夹中,我有一个index.html文件,如果我禁用MVC任何请求/提供html文件,如果我在我的应用程序中启用MVC请求/导致此异常:InvalidOperationException:未找到视图“index”。搜索了以下位置:/Views/Home/Index.cshtml/Views/Shared/Index.cshtml。因此,您希望Index.html即使在启用MVC时也可以使用。对吗?按照我的想法,这与您的问题无关,因为如果您在IIS中托管站点并将index.html作为默认页面,那么它将提供服务。刚刚更新了问题,在IIS express和VS2015 CTP5中,它仍然显示相同的错误。请检查我的答案。希望它能解决你的问题。这非常有效!与Web API 2.0中的Interest.IgnoreRoute不可用相比,这是一种非常不同的修复方法。它将在不久的将来上线,因此它将在没有静态文件中间件的情况下工作。当然,使用它并没有什么错,只是记住功能还没有消失,只是还没有实现,顺序是非常重要的。为了使上述方法有效,我使用了此命令<代码>app.UseDefaultFiles();app.UseStaticFiles();app.UseMvc()代码>这在最新版本的MVC 6(2015年9月5日)中对我有效。我需要添加包Microsoft.AspNet.StaticFiles(感谢Resharper!)。这在带有.NET Core RC2的MVC 6中似乎不适用。有一个.NET核心RC2版本吗?这就是我在接受的答案不起作用时所需要的!
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc();
}