我正在尝试从URI的int
中获取一个querystring
值,但是遇到了一些问题。
我有一个如下的请求URI
http://localhost:64813/api/MyController/GetTree?%24filter=parentId%20eq%207
我通过邮递员发送它,而控制器接收到它,但是我无法访问parentId
的值。我在做什么错了?
到目前为止,这是我在控制器上尝试过的方法……尽管这些尝试都没有效果……
1)我试图检索一个名为string
的过滤器,但它是null
...
[AllowAnonymous]
[HttpGet("GetTree")]
public IActionResult GetTree(string filter)
{
int q = filter.LastIndexOf(" eq ");
string r = parentId.Substring(q);
int result = Convert.ToInt32(r);
2)我试图使用[FromQuery]
从parentId
访问filter
,但是什么也没有。始终为null
值。
[AllowAnonymous]
[HttpGet("GetTree")]
public IActionResult GetTree([FromQuery(Name = "filter")] string parentId)
{
int q = parentId.LastIndexOf(" eq ");
string r = parentId.Substring(q);
int result = Convert.ToInt32(r);
3)就像第二次尝试一样,但是我试图获取整个查询。您可以猜到,string
是null
,再次...
[AllowAnonymous]
[HttpGet("GetTree")]
public IActionResult GetNodi([FromQuery] string filter)
{
int q = filter.LastIndexOf(" eq ");
string r = filter.Substring(q);
int result = Convert.ToInt32(r);
其他值得注意的尝试:
4)尝试#2,但我尝试将parentId
解析为int
而不是string
。没什么,即使我更改了请求值,它的默认值也始终为零。
5)通过尝试#1,尝试#2和#3将filter
解析为对象(见下文)进行尝试。字符串始终为null
。
public class NodeReq
{
public string ParentId { get; set; }
}
我做错了什么?如何访问此查询字符串parentId
值?
答案 0 :(得分:3)
您的URL错误,应该是:
http://localhost:64813/api/MyController/GetTree?filter=parentId%20eq%207
除非您使用的是OData,但事实并非如此。
如果您使用的是OData,则无需转义字符,它应与此URL一起使用:
http://localhost:64813/api/MyController/GetTree?$filter=parentId eq 7
如果您需要在.net核心项目中设置OData,建议您遵循以下程序包:
https://www.nuget.org/packages/Microsoft.OData.Core/
https://github.com/OData/odata.net
https://www.nuget.org/packages/Microsoft.AspNetCore.OData/7.0.0
答案 1 :(得分:1)
查询字符串键名称应与参数名称filter
相匹配,并且在其网址%24filter
中,您需要删除%24
您的网址应如下
http://localhost:64813/api/MyController/GetTree?filter=parentId%20eq%207