从URI查询字符串中解析字符串始终返回空值

时间:2018-07-25 08:44:48

标签: c# asp.net-core .net-core

我正在尝试从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)就像第二次尝试一样,但是我试图获取整个查询。您可以猜到,stringnull,再次...

    [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值?

2 个答案:

答案 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,建议您遵循以下程序包:

更新


由于您的角度设置需要像网址架构这样的OData,因此我无法控制它如何构造请求查询;您的控制器需要与协议兼容。有关此主题的更多信息,请参见:

https://www.nuget.org/packages/Microsoft.OData.Core/

https://github.com/OData/odata.net

OData Support in ASP.net core

更新:


应该是这个包:

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