我正在使用 Visual Studio 2015 在 ASP .NET 5 中构建 Web 应用程序。我创建了一个包含数据访问、业务、服务和用户界面层的解决方案。 我已经在用户界面层中引用了服务。由于在 MVC 6 中,Web API 和 MVC 都属于同一项目模板,因此有必要为服务和 UI 提供两个不同的层,或者使用不同 Controller 的同一项目就足够了。?
而且在 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]")]
如果是这样,如何在路由中渲染 View 时通过指定命名空间或一些约束来解决此冲突。
我是初学者。如果我错了请纠正我。
最佳答案
在 MVC 6 上,只要 View 位于同一项目甚至同一 Controller 上,您就可以拥有 RESTful API。
为应用程序设置路由的一种方法是在 Startup.cs
上创建一个映射,如下所示,使用 IApplicationBuilder
:
然后,您可以指定每个操作的路由:
通过在不带参数的操作上设置[HttpGet]
(或任何其他HTTP动词),它将按照约定创建一个路由,遵循您的操作名称。这样,你就可以解决很多冲突。还可以将同一个 HTTP 谓词的多个操作放在一个 Controller 上。
如上所述,每个帖子请仅提出一个问题。
关于asp.net-mvc - ASP.NET 5 中的 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432646/