2016-10-24 1 views
1

Ich mag wie so eine Sammlung von Objekten in einem HTTP-GET binden modellieren:Modell unter Verwendung von Sammlung Bindung HTTP GET

public class Model 
{ 
    public string Argument { get; set; } 
    public string Value { get; set; } 
} 

[HttpGet("foo")] 
public IActionResult GetFoo([FromQuery] IEnumerable<Model> models) { } 

Erstens: Was ist das Standardverhalten in ASP.NET-Core in diesem Szenario? Die model binding documentation ist spärlich, aber ich sage, dass ich property_name[index] Syntax verwenden kann.

Zweitens, wenn der Standardwert nicht gut ist, wie würde ich eine anständig aussehende URL erhalten, indem ich eine Art von benutzerdefinierten Modellbinder erstellen, die ich wiederverwenden könnte, da dies ein recht häufiges Szenario ist. Zum Beispiel, wenn ich auf das folgende Format binden:

Foo1 = Bar1 & foo2 = Bar2

Damit die folgenden Objekte erstellt werden:

new Model { Argument = "Foo1", Value = "Bar1" } 
new Model { Argument = "Foo2", Value = "Bar2" } 
+1

@CodeCaster Dies ist für ASP.NET Core. Bitte sehen Sie sich die Tags an, bevor Sie sie als Duplikat markieren. –

Antwort

1

Nicht viel geändert since MVC 5. Vor diesem Modell und Aktionsmethode:

public class CollectionViewModel 
{ 
    public string Foo { get; set; } 
    public int Bar { get; set; } 
} 


public IActionResult Collection([FromQuery] IEnumerable<CollectionViewModel> model) 
{ 

    return View(model); 
} 

Sie können folgende Abfrage-Strings verwenden:

?[0].Foo=Baz&[0].Bar=42 // omitting the parameter name 
?model[0].Foo=Baz&model[0].Bar=42 // including the parameter name 

Beachten Sie, dass Sie nicht diese Syntaxen mischen, so ?[0].Foo=Baz&model[1].Foo=Qux wird am Ende nur mit dem ersten Modell.

Wiederholung ohne Indizes wird standardmäßig nicht unterstützt, daher wird ?model.Foo=Baz&model.Foo=Qux Ihr Modell nicht füllen. Wenn Sie das mit "gut aussehend" meinen, müssen Sie einen benutzerdefinierten Modellbinder erstellen.

+0

Was ist mit dem Erstellen eines benutzerdefinierten Modellbinders? –

+0

@Muhammad Nun, ich denke, das ist eine separate Frage, in der Sie erklären sollten, welches Format der Abfragezeichenfolge Sie unterstützen möchten und was Sie versucht haben. – CodeCaster

+0

Aktualisieren Sie die Frage. –

Verwandte Themen