asp.net-mvc - ASP.NET 5 中的 Web 应用程序

标签 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 提供两个不同的层,或者使用不同 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:

Use IApplicationBuilder app

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

Setting route for an Action

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

如上所述,每个帖子请仅提出一个问题。

关于asp.net-mvc - ASP.NET 5 中的 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28432646/

相关文章:

c# - 在 MVC View 中使用 switch case

java - 从 java/android 获取 web api/asp token

c# - ASP.NET Core 2 没有配置身份验证处理程序来处理方案

c# - .NET 中的 OAuth 2.0 与 Instagram API

asp.net-mvc - 在局部 View 中渲染 umbraco 场

jquery - 在.Net MVC 5的同一页面中创建 "One to many"的 View

visual-studio - Visual Studio 项目 REST api

c# - ASP.NET Web API 的 CaSTLe Windsor ApiController Factory 实现

c# - 如何使 Redis 缓存在部署在 IIS Express 上但在本地主机上工作的 asp.net 核心 Web 上工作

asp.net-core - 是否可以使用 .NET Core 更改 .cshtml View 并立即查看更改?