2016-10-24 75 views
1

我要建模對象綁定的集合在HTTP GET像這樣:型號HTTP GET

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

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

首先,什麼是在這種情況下在ASP.NET核心的默認行爲? model binding documentation是稀疏的,但確實說我可以使用property_name[index]語法。其次,如果默認設置不好,我將通過構建某種自定義模型綁定器來重新獲得體面的URL,因爲這是一種相當常見的情況。例如,如果我要綁定的格式如下:

Foo1 = BAR1 & foo2的= BAR2

所以,以下對象創建:

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

@CodeCaster這是針對ASP.NET Core的。請在標記爲重複之前查看標籤。 –

回答

1

沒有太大的變化since MVC 5。鑑於這種模型和操作方法:

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


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

    return View(model); 
} 

您可以使用下面的查詢字符串:

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

請注意,您不能混用這些語法,所以?[0].Foo=Baz&model[1].Foo=Qux打算僅在第一個模型來結束。

默認情況下不支持重複索引,因此?model.Foo=Baz&model.Foo=Qux不會填充您的模型。如果這就是「體面看」的意思,那麼你需要創建一個自定義模型綁定器。

+0

如何創建自定義模型聯編程序? –

+0

@Muhammad我想這是一個單獨的問題,您應該在其中解釋您希望支持的查詢字符串格式以及您嘗試的內容。 – CodeCaster

+0

更新問題。 –