2017-07-01 1 views
0

Ich habe eine einfache HttpGet Endpunkt, die einen StringAspNetCore - Array auf Abfrage-Zeichenfolge 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)))); 
     } 
    } 

Gestern erhalten, es funktioniert gut, heute ist mein PC beim Booten versagt und wird wieder hergestellt worden, danach meine API geben mir schlechte Anfrage Ergebnisse.

Wenn ich nenne diese URL

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

Die Anforderung funktioniert richtig, aber wenn ich versuche, diese URL zu nennen (die früheren Arbeiten)

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

Die API mich senden BadRequest Status zurück (400). Schon versucht, das Array mit einigen Itens, Badrequest zu übergeben.

Irgendwelche Ideen, wie man damit umgeht?

Detail: Wenn ich von Postman anrufe, funktioniert es richtig.

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

Mein Modell

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

Da Sie Ihr Modell nicht zeigen, ist es wahrscheinlicher, dass Sie einen Tippfehler haben => 'FilterItens' sollte wahrscheinlich' FilterItems' sein. Aber Vorsicht, HTTP hat kein Konzept von "Arrays", es wird nur vom Server interpretiert. d.h. "q = 1 & q = 2" wird gerade als 2 q -Werte gesendet. Es ist kein Array. Gleiches für '? Q [] = 1 & q [] = 2'. Nur der Server (zB PHP, .NET, ASP.NET, Python, Ruby) interpretiert, wie dieser Wert behandelt wird: '? Q = 1 & q = 2' könnte als" nur take last "oder" nur take first "behandelt werden behandle mehrere Werte als Array ". Das verwendete Framework entscheidet, dass, ** nicht ** HTTP-Spezifikation – Tseng

+0

Es ist kein Tippfehler, ich empfange das Modell als eine "Zeichenfolge", die API gibt mir diesen Fehler vor der Konvertierung zurück. Bearbeitet mit meinem Modell –

+0

@Tseng Ich versuche, "{" Page ": 1," PageSize ": 5," FilterItens ": []} als Zeichenfolge an meine API zu senden und dann auf dem Server zu rendern. Wenn ich das mit Postbote sende, funktioniert es richtig, Wenn ich mit eckig sende, broches –

Antwort

0

Das Root-Problem war:

war meine Authorization Token für die Request-Header zu groß.

Die Token-Länge war mit etwa 16k Länge und broker der Header.

Ich habe eine Änderung an der Token und es endete mit 800 Länge, alles funktioniert wieder.

Verwandte Themen