AngularJS 使用 MVC 6
AngularJS with MVC 6
这是一个 MVC 6/WebApi 应用程序。我正在尝试在后端使用 WebApi,在前端使用 AngularJS。
我有两个静态文件:index.html 和 login.html
(最终会有更多的静态文件。)
我的 Angular 应用程序包含在 index.html 中,而视图(例如 /login)是从静态文件(即 login.html)加载的。
如果我转到我的根目录 URL,index.html 就可以正常加载。但是,如果我转到 /login,我会收到 404 页面未找到。
现在,这么说吧,我不想用一堆控制器和视图来拖延我的应用程序,因为没有必要简单地提供静态文件。太过分了。
我的路线设置为 API 呼叫服务(即 ~/api/whatever)。我如何让 MVC 6 忽略所有其他路由?
仅供参考,似乎 MapPageRoute 在 MVC 6 中已弃用?
编辑:
我为让它真正工作所做的一件事是添加我自己的中间件来拦截请求。下面的代码是在 Configure 方法中我的所有默认中间件之后添加的:
app.Use(next => async context =>
{
if (context.Request.Path.Value.StartsWith("/api"))
await next.Invoke(context);
else
await context.Response.WriteAsync(System.IO.File.ReadAllText("index.html"));
});
这似乎有点多,只是一个 hack。它所做的只是允许任何以“/api”开头的请求通过(然后由 MVC 中间件拾取),但任何其他调用都使用 index.html。因此,如果我请求的 URL 是“/login”,则会提供 index.html 文件,then Angular 查看路由并将 login.html 文件加载到视图中。
还有其他建议吗?
我能够完成您的要求here。基本上,我在 index 操作中添加了一个 catch all 路由:
[路线("{*路径}")]
意味着如果不存在 MVC 操作,调用我的 Index 操作,angular 路由将从那里获取
好的,由于 MVC 6/ASP.NET 5 框架中不存在某些东西,我创建了自己的中间件,它提供了更多的灵活性。它已添加到 GitHub 并可通过 NuGet 获得。
这是一个 MVC 6/WebApi 应用程序。我正在尝试在后端使用 WebApi,在前端使用 AngularJS。
我有两个静态文件:index.html 和 login.html
(最终会有更多的静态文件。)
我的 Angular 应用程序包含在 index.html 中,而视图(例如 /login)是从静态文件(即 login.html)加载的。
如果我转到我的根目录 URL,index.html 就可以正常加载。但是,如果我转到 /login,我会收到 404 页面未找到。
现在,这么说吧,我不想用一堆控制器和视图来拖延我的应用程序,因为没有必要简单地提供静态文件。太过分了。
我的路线设置为 API 呼叫服务(即 ~/api/whatever)。我如何让 MVC 6 忽略所有其他路由?
仅供参考,似乎 MapPageRoute 在 MVC 6 中已弃用?
编辑:
我为让它真正工作所做的一件事是添加我自己的中间件来拦截请求。下面的代码是在 Configure 方法中我的所有默认中间件之后添加的:
app.Use(next => async context =>
{
if (context.Request.Path.Value.StartsWith("/api"))
await next.Invoke(context);
else
await context.Response.WriteAsync(System.IO.File.ReadAllText("index.html"));
});
这似乎有点多,只是一个 hack。它所做的只是允许任何以“/api”开头的请求通过(然后由 MVC 中间件拾取),但任何其他调用都使用 index.html。因此,如果我请求的 URL 是“/login”,则会提供 index.html 文件,then Angular 查看路由并将 login.html 文件加载到视图中。
还有其他建议吗?
我能够完成您的要求here。基本上,我在 index 操作中添加了一个 catch all 路由:
[路线("{*路径}")]
意味着如果不存在 MVC 操作,调用我的 Index 操作,angular 路由将从那里获取
好的,由于 MVC 6/ASP.NET 5 框架中不存在某些东西,我创建了自己的中间件,它提供了更多的灵活性。它已添加到 GitHub 并可通过 NuGet 获得。