【问题标题】:How to ignore routes in MVC6如何忽略 MVC6 中的路由
【发布时间】:2015-03-17 00:28:12
【问题描述】:

我正在开发一个非常简单的 SPA 风格的应用程序,我不想使用 razor,所以我只需要它来提供 HTML 文件(来自 wwwroot 文件夹),除非 js 调用我的 API 控制器。在 Web API 2 中,您可以让路由器忽略 HTML 文件,以便直接提供它们,例如

config.Routes.IgnoreRoute("Html", "{whatever}.html/{*pathInfo}");

类似于此示例:http://www.strathweb.com/2014/04/ignoring-routes-asp-net-web-api/ 是 IgnoreRoute 功能只是未实现还是已更改?

目前如果我有 app.UseMvc();在我的 Startup.cs 中,对“/”的任何获取请求都会给我这个异常:

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 控制器将无法工作。

【问题讨论】:

  • 我不明白你的意思是当注释掉 app.UseMvc() 时它工作正常,但是 web api 当然不能工作?你能在这里给出一些示例代码吗?
  • 在我的 wwwroot 文件夹中,我有一个 index.html 文件,如果我禁用 MVC 任何对/提供 html 文件的请求,如果我在我的应用程序中启用 MVC 请求/导致此异常:InvalidOperationException :未找到视图“索引”。搜索了以下位置:/Views/Home/Index.cshtml /Views/Shared/Index.cshtml。
  • 所以你希望 Index.html 即使在 MVC 为 enable.right 时也能提供服务?根据我的想法,这与您的问题无关,因为如果您在 IIS 中托管站点并将 index.html 作为默认页面,那么它将提供服务。
  • 刚刚更新了问题,在 IIS express 和 VS2015 CTP5 中仍然显示相同的错误。
  • 检查我的答案。希望它能解决您的问题。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

我想如果你想在启用 MVC 选项的情况下提供 index.html?如果是这样,您必须更改一项设置。

当您启用 MVC 时,当您的 url 类似于 http://localhost:yourport 时,会添加一个默认路由来搜索 Home/Index。

当您禁用 MVC 时,它将为 index.html 提供服务,因为在这种情况下不存在任何路由。

因此,如果您想在启用 MVC 时提供 index.html,请在使用 MVC 之前在 Configure 函数中添加以下内容。

app.UseDefaultFiles(new Microsoft.AspNet.StaticFiles.DefaultFilesOptions() { DefaultFileNames = new[] { "index.html" } });
// your UseMVC goes here.

【讨论】:

  • 这很完美!与 Web API 2.0 相比,这是一种非常不同的修复方式,很有趣。
  • IgnoreRoute 尚不可用。它会在不久的将来上线,因此它可以在没有静态文件中间件的情况下工作。使用当然没有错,只要记住功能并没有消失,只是还没有实现,
  • 订单非常重要。为了上述工作,我使用了这个命令。 app.UseDefaultFiles(); app.UseStaticFiles(); app.UseMvc();
【解决方案2】:
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseDefaultFiles();
    app.UseStaticFiles();
    app.UseMvc();
} 

【讨论】:

  • 这适用于我最新版本的 MVC 6 (9/5/2015)
  • 我需要添加包 Microsoft.AspNet.StaticFiles(感谢 Resharper!)
  • 这似乎不适用于带有 .NET Core RC2 的 MVC 6。有 .NET Core RC2 版本吗?
  • 当接受的答案不起作用时,这就是我所需要的!
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
相关资源
最近更新 更多