Asp.net mvc ASP.net5中的Web应用

Asp.net mvc ASP.net5中的Web应用,asp.net-mvc,asp.net-web-api,asp.net-core,asp.net-core-mvc,Asp.net Mvc,Asp.net Web Api,Asp.net Core,Asp.net Core Mvc,我正在使用Visual Studio 2015在ASP.NET 5中构建一个Web应用程序。我创建了一个包含数据访问、业务、服务和用户界面层的解决方案。 我引用了用户界面层中的服务。因为在MVC6中,Web API和MVC都属于同一个项目模板,所以有必要为服务和UI提供两个不同的层,或者使用不同控制器的同一项目就足够了 在UI项目中,我还取消了Startup.cs中以下几行的注释 services.AddWebApiConventions(); routes.MapWebApiRoute("De

我正在使用Visual Studio 2015在ASP.NET 5中构建一个Web应用程序。我创建了一个包含数据访问、业务、服务和用户界面层的解决方案。 我引用了用户界面层中的服务。因为在MVC6中,Web API和MVC都属于同一个项目模板,所以有必要为服务和UI提供两个不同的层,或者使用不同控制器的同一项目就足够了

在UI项目中,我还取消了Startup.cs中以下几行的注释

services.AddWebApiConventions();
routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");
在运行项目时,主页显示良好,但当我单击主页中的链接时,url会发生如下变化

http://localhost:45075/api/Home
它给出了一个错误页面,上面说

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied.
Sample.Services.Controllers.HomeController.Index
Sample.Services.Controllers.HomeController.About
Sample.Services.Controllers.HomeController.Contact
Sample.Services.Controllers.HomeController.Error
我的理解是,因为我启用了Web Api约定,所以它将转到具有路由属性的服务的主控制器

[Route("api/[controller]")]
如果是,如何在管线中呈现视图时通过指定命名空间或某些约束来解决此冲突


我是初学者。如果我错了,请纠正我。

在MVC6上,只要视图在同一项目中,甚至在同一控制器上,就可以使用RESTful API

为应用程序设置路由的一种方法是在
Startup.cs
上创建一个映射,如下所示,使用
IAApplicationBuilder

然后,可以为每个操作指定路由:

通过在不带参数的操作上设置
[HttpGet]
(或任何其他HTTP谓词),它将按照约定在操作名称后创建路由。这样,您可以解决许多冲突。也可以在一个控制器上放置同一HTTP谓词的多个操作


如上所述,请在每篇文章中只问一个问题。

请尝试在每篇文章中问一个问题,这会使提供有用的答案变得更容易。也就是说,您需要使用约定或显式映射,而不是两者都使用。