首页 > 解决方案 > 从 URI 查询字符串解析字符串总是返回空值

问题描述

我正在尝试int从我的 URI 中检索一个值,querystring但遇到了一些问题。

我有一个如下的请求 URI

http://localhost:64813/api/MyController/GetTree?%24filter=parentId%20eq%207

我通过邮递员发送它,控制器接收它,但我无法访问parentId' 值。我究竟做错了什么?

这是我迄今为止在我的控制器上尝试过的……但是这些尝试都没有奏效……</p>

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]to 访问parentIdfrom 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,但我尝试解析parentIdint而不是string. 没什么,默认值总是零,即使我更改了请求值。

5) 尝试使用 try #1、try #2 和 #3 解析filter为对象(见下文)。字符串总是null.

public class NodeReq
{
    public string ParentId { get; set; }
}

我做错了什么?如何访问此查询字符串parentId值?

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

解决方案


您的网址错误,应该是:

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,我建议你遵循这个包:

更新


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

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

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

ASP.net 核心中的 OData 支持

更新:


应该是这个包:

https://www.nuget.org/packages/Microsoft.AspNetCore.OData/7.0.0


推荐阅读