在webapi2.2中:
http://xxxx:xx/api/test/1等价于http://xxxx:xx/api/test?id=1
这两个请求都会匹配到controller中
public string Get(string id) 这个方法
但是在asp.net core中,不知道如何才能实现2.2中的querystring的方式。
麻烦各位指点迷津。谢谢!
可以用命名路由。
Route("api/test/{id}") public IActionResult XXX(int id, [FromUri]Params params) { } class Params { public int Id { get; set; } }
谢谢您的回复,好像core里没有FromUri这个特性了。现在的代码如下:
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[Route("{id}")]
public string Get(int id)
{
return "value";
}
以前2.2的时候 用querystring还是/test/id这两种方式都可以匹配到第二个方法,但是换到core以后,只能通过api/test/id的方式了。所以想知道2.2的querystring的写法在core里应该怎么写。用[FromQuery]也不行。
@songmc: 要看你用的是mvc还是webapi~另外检查你的默认路由配置。
@幻天芒: 用的是webapi,路由那部分没做配置。
@songmc: 看了下,Core里面确实没有FromUri,但是有更明确的FromQuery,FromHeader 等。
@幻天芒: 多谢。
// GET api/values/5
[HttpGet("{id}")]
public string Get([FromQuery]int id)
{
return "value";
}
貌似这样写也不行。
@songmc: 你最好参考下我最开始给出的那段代码~你这样一个id是搞不定所有的。
@幻天芒: 谢谢。
@幻天芒: 谢谢,你之前说的我之前已经尝试过了。虽然没得到答案,还是非常感谢你的帮助。
@songmc: 看到你的原始需求了,仅仅是实现两个请求绑定到一个controller上。
可以配置两个Route即可:
[HttpGet("/xxx/{id}")] [HttpGet("/xxx")] public int Get(int id) { return id; }
@幻天芒: 谢谢,这样可以,需要把controller上面的特性去掉。不好意思,问题我刚才关闭了,怎么给你圆豆呢。
@songmc: 不用了。