我正在尝试在.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/

10-13 03:18