我正在将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。因此,这意味着在这种情况下,路由器可以通过查询参数进行区分,而在第二种情况下则不能。据我所知,这与默认路由模板无关,因为无论如何我都拒绝了它。