Asp.net core AspNetCore-QueryString请求上的数组

Asp.net core AspNetCore-QueryString请求上的数组,asp.net-core,asp.net-core-webapi,Asp.net Core,Asp.net Core Webapi,我有一个接收字符串的简单httpGet端点 [Authorize] [HttpGet("filter/{filters}"), Route("filter")] public virtual IActionResult Filter(string filters) { try { return Ok(Service.GetByFilter(JsonConvert.DeserializeObject<Filter

我有一个接收字符串的简单httpGet端点

[Authorize]
    [HttpGet("filter/{filters}"), Route("filter")]
    public virtual IActionResult Filter(string filters)
    {
        try
        {
            return Ok(Service.GetByFilter(JsonConvert.DeserializeObject<FilterHelper>(filters)));
        }
        catch (Exception ex)
        {
            Logger.LogWarning(LoggingEvents.GET_ENTITY_BY_FILTER, ex, Localizer["EntityGetFilterFailed"]);
            return Ok(new RequestResult(StatusResult.Danger, new Message(string.Format(Localizer["UnexpectedError"], LoggingEvents.GET_ENTITY_BY_FILTER))));
        }
    }
请求工作正常,但如果我尝试调用此url(之前可以使用此url)

API向我发回一个BadRequest状态(400)。已经尝试通过一些ITEN传递数组,请求也失败了

有没有关于如何处理的想法

细节:如果我从邮递员那里打电话,它是正确的

http://localhost:23272/api/users/filter?filters={"Page":1,"PageSize":5, "FilterItens": []}
我的模型

public class FilterHelper
{
    #region Properties
    public int Page { get; set; }
    public int PageSize { get; set; }
    public ICollection<FilterItem> FilterItens { get; set; }
    public string[] Includes { get; set; }
    #endregion
}
公共类过滤器帮助器
{
#区域属性
公共整型页{get;set;}
公共int PageSize{get;set;}
公共ICollection筛选器{get;set;}
公共字符串[]包括{get;set;}
#端区
}
根本问题是:

我的授权令牌对于请求头太大。

令牌的长度约为16k,正在刺穿头部


我对令牌进行了更改,长度为800,一切都恢复正常。

由于您没有显示您的模型,很可能您的拼写错误=>
FilterItems
应该是
FilterItems
。但是请注意,HTTP没有“数组”的概念,它只由服务器解释。i、 e.
?q=1和q=2
仅作为2个q值发送。它不是数组。同样适用于
?q[]=1和q[]=2
。只有服务器(即PHP、.NET、ASP.NET、python、ruby)解释如何处理此值:
?q=1&q=2
可以被视为“仅取最后一个”或“仅取第一个”或“将多个值视为数组”。所使用的框架决定,不是HTTP规范,也不是打字错误,我将模型作为“字符串”接收,api在转换之前将该错误返回给我。用我的model@Tseng我正试图将“{”Page“:1,“PageSize“:5,“FilterItens”:[]}”作为字符串发送到我的API,然后在服务器上呈现它。如果我和邮递员一起发送,它会正常工作,如果我和angular一起发送,它会断开。首先,请参阅更新的评论。其次,一旦您有了
=
&
,向控制器传递这样的数据就会失败,因为
&
被视为参数分隔符,而
=
被视为参数赋值。如果您将参数传递给查询,您总是必须转义它们,尤其是
&
=
,但是我可以从Firefox窗口(在ASP.NET中通过
Uri.EscapeDataString(…)
。不知道JS的那个,或者如果它也正确地在那里转义,你必须在原始请求时观察,而不是在FF视图中。我不会在字符串中有一个
=
,而且,就像我难过的那样,如果我发出一个get-via-postman,它可以正常工作,我就是不明白为什么它不能从我的应用程序中工作
http://localhost:23272/api/users/filter?filters={"Page":1,"PageSize":5, "FilterItens": []}
public class FilterHelper
{
    #region Properties
    public int Page { get; set; }
    public int PageSize { get; set; }
    public ICollection<FilterItem> FilterItens { get; set; }
    public string[] Includes { get; set; }
    #endregion
}