我正在尝试在.net核心Web API中实现基本路由。
我有一个像这样的控制器:
[Route("api/[controller]")]
public class FooController : Controller
{
//out of the box
[HttpGet("[action]")] //get the list
public IEnumerable<Foo> Get()
{
//omitted
}
//added: request detail request///
[HttpGet("[action]/{fooid}")]
public Foo Get(string fooid)
{
//omitted
}
}
我试图使以下路线可行:
详细一:
http://localhost:2724/api/Product/Get?fooid=myfoo1
和一个普通的上市:
http://localhost:2724/api/Product/Get
问题在于,使用
?fooid=
进行的呼叫最终以IEnumerable
版本结束,我似乎无法正确完成。我尝试了各种语法变体来克服此问题,例如:
[HttpGet("{fooid}")]
,但这似乎无济于事。我知道我可以重命名该方法,但是我是作为练习来做的。
我也知道并没有要求提供文档,但是欢迎您提供任何帮助。
我也尝试添加一条路线:
app.UseMvc(routes =>
{
routes.MapRoute( //default
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "fooid",
template: "{controller=Home}/{action=Index}/{fooid?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
我尝试了here所述的一些方法,但没有成功。
你能给我一些指示吗?
最佳答案
您的参数版本网址不正确。它必须与您在HttpGet属性中编写的相同,例如
http://localhost:2724/api/Product/Get/myfoo1
如果确实希望将参数作为?fooId = myFoo传递,则需要将方法声明为:
[HttpGet("[action]")]
public Foo Get([FromUri]string fooId)
{
...
}
关于c# - 如何在asp.net-core-webapi中创建路由?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49278912/