Ste*_*fan 2 c# asp.net-core-webapi
我正在尝试在我的.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
}
}
Run Code Online (Sandbox Code Playgroud)
我试图使以下路线工作:
一个细节:
http://localhost:2724/api/Product/Get?fooid=myfoo1
Run Code Online (Sandbox Code Playgroud)
列表的一般内容:
http://localhost:2724/api/Product/Get
Run Code Online (Sandbox Code Playgroud)
问题是,?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" });
});
Run Code Online (Sandbox Code Playgroud)
我尝试了这里描述的一些方法,但没有成功.
你能给我一些指示吗?
您的参数版本的URL不正确.它必须与您在HttpGet属性中编写的相同,例如
http://localhost:2724/api/Product/Get/myfoo1
Run Code Online (Sandbox Code Playgroud)
如果你确实想要将参数传递为?fooId = myFoo,那么你需要将你的方法声明为:
[HttpGet("[action]")]
public Foo Get([FromUri]string fooId)
{
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |