【发布时间】:2019-12-03 12:40:13
【问题描述】:
我希望两者都能调用 GET:
/api/Test/Test/1
/api/Test/Test?id=1
public class TestController : ApiController
{
[HttpGet]
public string Test(int id)
{
return "Test";
}
}
如何配置路由?
我有默认的:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这会使“/api/Test/Test?id=1”工作,但不能工作“/api/Test/Test/1”
我尝试在操作上添加属性路由,这使得“/api/Test/Test/1”工作但现在“/api/Test/Test?id=1”不起作用:
[HttpGet]
[Route("api/test/test/{id}")]
public string Test(string id)
{
return "a";
}
【问题讨论】:
-
您使用的 .NET 版本是什么?
-
我在 ASP.NET 上,而不是 Core
-
好的,所以我创建了一个新的 ASP.NET MVC 项目,但我无法重现您所描述的内容,尽管我可以发现一些差异,例如路线相似但不完全相同的。使用默认路由配置,您在上面描述的方法在这两种情况下都适用。您能否提供有关您的环境的更多详细信息?带有您问题的最小工作示例的 git repo 真的很有帮助。
-
@IraklisGkougkousis 这可能是因为您只是在没有任何其他修改的情况下运行。以下是具体步骤: 1. 创建一个新应用并选择“Web API”模板。 2. 在
ValuesController中,将Get操作重命名为Test,并为其添加[HttpGet]属性。调用“api/Values/Test?id=5”有效,但不能调用“api/Values/Test/5” -
这很有趣。创建默认 MVC 项目时,您想要的东西开箱即用,但在 API 项目模板上却不行!即使路线配置看似相同。我正在和朋友一起调查此事,我会尽快回复您。
标签: asp.net asp.net-web-api asp.net-mvc-routing