我爲複雜類創建了ModelBinder。我想重複使用這個ModelBinder屬性。 因此,可以在Web API的屬性上使用ModelBinder。我正在尋找一個樣例實現,它提供了像MVC中的屬性綁定。 下面是我遇到的參考鏈接,但這些實現是針對MVC的。 任何幫助表示讚賞。在Web API中創建Property Model Binder
4
A
回答
1
我有同樣的目標,但沒有找到合適的解決方案來解析使用粘合劑而不是整個模型的確切性質,和。但是,有一種解決方案或多或少地適應我 - 它以相同的方式表現出色,但需要用屬性標記模型。我知道我有點晚了,但也許會幫助有同樣問題的人。
解決方案是將自定義TypeConverter
用於所需的類型。首先,決定你想如何解析你的模型。在我的例子,我需要以某種方式解析搜索條件,所以我的複雜模型是:
[TypeConverter(typeof(OrderModelUriConverter))] // my custom type converter, which is described below
public class OrderParameter
{
public string OrderBy { get; set; }
public int OrderDirection { get; set; }
}
public class ArticlesSearchModel
{
public OrderParameter Order { get; set; }
// whatever else
}
然後決定如何你想解析輸入。在我的情況下,我簡單地用逗號分隔值。
public class OrderParameterUriParser
{
public bool TryParse(string input, out OrderParameter result)
{
result = null;
if (string.IsNullOrWhiteSpace(input))
{
return false;
}
var parts = input.Split(',');
result = new OrderParameter();
result.OrderBy = parts[0];
int orderDirection;
if (parts.Length > 1 && int.TryParse(parts[1], out orderDirection))
{
result.OrderDirection = orderDirection;
}
else
{
result.OrderDirection = 0;
}
return true;
}
}
然後創建一個轉換器,它將採用查詢的一部分並使用上述規則將其轉換爲您的模型。
public class OrderModelUriConverter : TypeConverter
{
private static readonly Type StringType = typeof (string);
public OrderModelUriConverter()
{
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == StringType)
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
var str = value as string;
if (str != null)
{
var parser = new OrderParameterParser()
OrderParameter orderParameter;
if (parser.TryParse(str, out orderParameter))
{
return orderParameter;
}
}
return base.ConvertFrom(context, culture, value);
}
}
轉換器的用法在第一個樣本中指定。由於您正在解析URI,因此不要忘記在控制器的方法中也將[FromUri]
屬性添加到您的參數中。
[HttpGet]
public async Task<HttpResponseMessage> Search([FromUri] ArticlesSearchModel searchModel) // the type converter will be applied only to the property of the types marked with our attribute
{
// do search
}
此外,您還可以看看this excellent article,其中包含類似的例子還解析參數等幾個方面。
相關問題
- 1. MVC 3 Webapp - Model Binder
- 2. asp.net 5/mvc 6/model binder/angular
- 3. Web Api中的Model Binder不綁定我的提琴手Json發佈請求
- 4. 在ASP.NET中創建Web API
- 5. Form Encoded Javascript int [] not Binding Model Binder
- 6. ASP.NET MVC Model Binder返回空對象
- 7. Web API創建API密鑰
- 8. 在Web API中創建POST方法
- 9. 在ASP.NET MVC3 Model Binder中使用依賴注入
- 10. 如何在Objective C++中創建Model類?
- 11. 在10月份創建API(Web Service)CMS
- 12. 如何在PHP創建Web API服務
- 13. DAL-> Design :: simple與oop model && property與method
- 14. 在web軟件中構建安全架構(創建API)
- 15. 從db model創建xsd
- 16. .NET MVC 3自定義十進制? Model Binder
- 17. ASP.NET MVC5 Model Binder - 綁定集合集合時爲空
- 18. 是否有可能在asp.net mvc中使用「複雜」模型和Data Annotation Model Binder?
- 19. 創建自託管的Web API或使用Asp.Net核心Web API?
- 20. NZ Property for sale API
- 21. 如何在swigger code gen工具中創建一個包以及api和model包
- 22. Web MVC:如何構建Model層?
- 23. 圍繞現有的API創建web api包裝器
- 24. 動態創建@property的定義NSObject類
- 25. 創建一個WCF Web Api客戶端
- 26. 如何創建web api方法?
- 27. Web API:使用DI創建ApiController
- 28. 創建社交網絡Web服務API
- 29. 如何創建ASP.NET Web API Url?
- 30. 爲web API控制器創建排序