ASP.NET 5中的Web应用程序

时间:2015-02-10 13:16:18

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

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

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

services.AddWebApiConventions();
routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");

在运行项目时,主页显示正常但是当我点击主页中的链接时,网址会像这样更改

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约定,它将转到具有路由属性的服务的Home Controller

[Route("api/[controller]")]

如果是这样,如何通过在路由中呈现视图时指定名称空间或某些约束来解决此冲突。

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

1 个答案:

答案 0 :(得分:2)

在MVC 6上,只要在同一个项目中的视图,甚至在同一个控制器上,就可以拥有RESTful API。

为您的应用设置路由的一种方法是使用Startup.csIApplicationBuilder上创建地图:

Use IApplicationBuilder app

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

Setting route for an Action

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

如上所述,请每个帖子只询问一个问题。