2015-12-02 96 views
1

这是一个MVC 6/WebApi应用程序。我试图在前端使用AngularJS在后端使用WebApi。AngularJS with MVC 6

我有两个静态文件:(有最终将更多的静态文件)的index.html和login.html的

我的角度应用程序包含在index.html的,而视图(如/登录)是从静态文件(即login.html)加载的。

如果我去我的根URL,index.html加载得很好。但是,如果我去/登录,我收到一个404页面未找到。

现在,让我们说,我不要想要让我的应用程序与一堆控制器和视图停滞不前,因为它不必简单地提供静态文件。这太过分了。

我有我的路由设置服务于API调用(即〜/ api /无论)。我如何让MVC 6忽略所有其他路线?

仅供参考,它也似乎MapPageRoute已弃用在MVC 6?

编辑:我做真正得到它的工作
一件事是添加自己的中间件拦截请求。下面的代码毕竟是在配置方法我的默认中间件补充说:

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")); 
}); 

这多少显得有点,它只是一个黑客。它所做的只是允许任何以“/ api”开始的请求(然后由MVC中间件拾取),但任何其他呼叫都会以index.html的内容提供。因此,如果我请求的URL是“/ login”,则提供文件,,然后角度查看路径并将文件加载到视图中。

其他建议?

+0

您使用什么路由?内部或ui路由器? – tuckerjt07

+0

我正在使用angular的ui路由器。另外,重新检查这个问题......我添加了一个可以工作的黑客,但是寻找替代品。 – a11smiles

+1

https:// github。com/angular-ui/ui-router/wiki/Frequently-Questions-Questions#如何配置你的服务器到工作与html5mode – Claies

回答

0

我能够做你所要求的here。基本上,我添加了一个包罗万象的路线,我的索引行动:

[路线(“{*路径}”)]如果没有MVC的动作不存在,请拨打我的索引行动和角路由将采取

意义从那里开始

+0

感谢您的回应,但您未能错过这一点...我不想使用控制器/视图。这是一个与WebApi进行通信的纯粹的客户端应用程序。 – a11smiles