2017-07-01 3 views
0

は私が持っているHTTPGETエンドポイントAspNetCore - のQueryStringのアレイBadRequest

[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)))); 
     } 
    } 

昨日の文字列を受け取ることは、それがうまく働いていた、今日の私のPCがブートに失敗し、私のAPIを与えていることをした後、復元されているシンプルな私の悪い要求の結果。

私は要求が正しく動作しますが、私は(それ以前の作品)このURLを呼び出そうと

http://localhost:23272/api/users/filter?filters={"Page":1,"PageSize":5} 

このURLを呼び出すと

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

APIくれBadRequestステータスを返送( 400)。既にいくつかのitens、badrequestも配列を渡そうとしました。

これをどのように処理するかに関するアイデアはありますか?

詳細:私が郵便配達所から電話すると、それは正しく機能します。

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 
} 

enter image description here

+0

モデルを表示していないので、typo => 'FilterItens'はおそらく' FilterItems'であるはずです。しかし、HTTPは "配列"の概念を持たず、サーバーによってのみ解釈されることに注意してください。すなわち、「q q = 1&q = 2」が2 q値として送信される。配列ではありません。 '?q [] = 1&q [] = 2'と同じです。 '?q = 1&q = 2'は、「最後に取得する」または「最初に取得する」または「最初に取得する」と扱うことができます。サーバー(PHP、.NET、ASP.NET、Python、Rubyなど)複数の値を配列として扱う "。使用されているフレームワークは、** HTTP仕様書ではありません** HTTP仕様 – Tseng

+0

これは誤字ではなく、私はモデルを "文字列"として受け取っています.APIは変換前にそのエラーを返します。私のモデルで編集しました –

+0

@Tseng "{" "Page":1、 "PageSize":5、 "FilterItens":[]} "をAPIに文字列として送り、サーバ上でレンダリングしようとしています。 私は郵便配達員と一緒に送っても問題ありません。角度で送った場合、それは破損します。 –

答えて

0

根本的問題があった。

マイ認証トークンはリクエストヘッダには大きすぎました。

トークンの長さは約16kの長さで、ヘッダーを中断していました。

私はトークンに変更を加え、800の長さで終了しました。すべてが再び動作します。