ASP.NET 4.6和Core之间的路由差异

时间:2018-11-16 07:49:36

标签: c# asp.net .net asp.net-core .net-core

我正在将ASP.NET 4.6服务器软件转换为Core。

在我的旧项目中,我有:

RouteTable.Routes.MapHttpRoute(
   name: "DefaultApi",
   routeTemplate: "api/{controller}/{id}",
   defaults: new { id = RouteParameter.Optional }
);

然后具有两个功能的控制器:

[Route("api/v2/users")]
public HttpResponseMessage Get()

[Route("api/v2/users")]
public HttpResponseMessage GetByEmail([FromUri]string Email)

这行得通。

现在在新项目中,我具有相同的控制器,但是没有初始的默认路由模板,因为我还是不想使用它。

[Route("api/v2/[controller]")]
public class UsersController : Controller

具有相同的两个功能

[HttpGet]
public async Task<IActionResult> Get()

[HttpGet]
public async Task<IActionResult> GetByEmail([FromQuery]string email)

但是现在我得到了AmbiguousActionException。我知道我可以从本质上将其优化为一个功能,并且还可以通过书本使其更加REST,但是问题是:发生了什么变化? ASP.NET Core是否变得更加严格?还是我只是想念一些东西?

编辑:两种实现都对两个函数使用相同的路由-“ api / v2 / users”-但在第一个中没有AmbiguousActionException。因此,这意味着在这种情况下,路由器可以通过查询参数进行区分,而在第二种情况下则不能。据我所知,这与默认路由模板无关,因为无论如何我都拒绝了它。

0 个答案:

没有答案