2016-11-14 88 views
0

我的ASP.NET Web API類有有各種過濾器,其分別對應從URI的過濾器類GET端點:的Web API模型綁定CSV

控制器:

public IHttpActionResult List([FromUri] FilterModel filter) 

過濾器類:

public class FilterModel { 
    public int Something {get;set;} 
    public int[] UserIds {get;set;} 
    ...lots of other properties... 
} 

我想用戶ID被作爲一個逗號分隔的列表傳遞0

但是,這是網絡API,它預計:

http://foo.com/api/things?UserIds=1&UserIds=2&UserIds=3 

有沒有辦法解決這個問題的簡單方法。我發現我可以創建一個自定義模型綁定器,但對於99%的模型綁定,我不想改變任何東西。我的理想解決方案是這樣的:

public class CustomModelBinder : IModelBinder 
{ 
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) 
    { 

     // Access the "default" model that's created from the Uri params 
     var model = ??? 

     // Then do some work to bind the UserIds 

     return true; 
    } 
} 

任何想法?

感謝

+0

您需要創建一個自定義媒體類型格式化程序,例如:[link](http://stackoverflow.com/questions/15633402/csv-media-type-formatter-for-asp-net-web-api) –

回答

0

不知道,如果這是太簡單了,但作爲「1,2,3」的參數值(據我所知)僅作爲字符串傳遞,可以使用string.Split轉換的值(一個或多個),以整數的數組:

var userIds = Array.ConvertAll(parm.Split(','), int.Parse); 

當然,有運行成出現FormatException的機會,當不是所有逗號分隔的值是數字,所以you'ld更好做轉換與不止一行代碼。

希望它有幫助。