如何为webapi控制器正确设置路由,以便id作为url的一部分而不是querystring



我遇到了一个问题,通过从url而不是querystring参数获取id来正确地将url解析到我的控制器。我有一个.netwebapi项目,该项目使用以下文件夹结构设置。

Root
Controllers
v1
Partner
CompaniesController
PersonController
QuoteController

因此,正如您所看到的,CompaniesController在Partner文件夹中,而其他控制器在v1文件夹中。我还在我的CompaniesController上使用RoutePrefix,例如…

[EnableCors("*", "*", "*")]
[RoutePrefix("api/v1/partner/companies")]
public class CompaniesController : BaseApiController{
[Route("contact")]
[HttpPost]
public IHttpActionResult Contact(string id)
{
}
}

我遇到的问题是,下面的url返回一个404。

https://localhost:44322/api/v1/partner/companies/contact/9da093ef-57a5-4da0-bd0e-5ac97cf304e2

但是下面的url运行良好,并调用查找方法

https://localhost:44322/api/v1/partner/companies/contact?id=9da093ef-57a5-4da0-bd0e-5ac97cf304e2

我想这可能是我的routeconfig文件,所以我把它添加到其中,但仍然没有按预期操作。

routes.MapRoute(
name: "Partner",
url: "api/v1/partner/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

知道我需要更改什么才能将id作为url的一部分而不是querystring参数来使用吗?

如果其他人遇到这种情况,我通过更改方法上的route属性来解决这个问题。所以以前看起来像[路由("contact"(]的现在是[路由("contact/{id}"(]。