【问题标题】:Web application in ASP.NET 5ASP.NET 5 中的 Web 应用程序
【发布时间】:2015-04-10 13:01:42
【问题描述】:

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

在 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]")]

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

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

【问题讨论】:

  • 请尝试在每个帖子中提出一个问题,这样可以更轻松地提供有用的答案。话虽如此,您需要使用约定或显式映射,而不是两者兼而有之。

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


【解决方案1】:

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

为您的应用程序设置路由的一种方法是像这样在Startup.cs 上创建一个地图,使用IApplicationBuilder

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2010-09-21
    • 2017-08-06
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多