WebApi 将ModelBinder ValueProvider 加入到项目中
設定模型系結器
有幾種方式可以設定模型系結器。 首先,您可以將 [ModelBinder] 屬性加入至參數。
public HttpResponseMessage Get([ModelBinder(typeof(GeoPointModelBinder))] GeoPoint location)
您也可以將 [ModelBinder] 屬性加入至類型。 Web API 會針對該類型的所有參數使用指定的模型系結器。
[ModelBinder(typeof(GeoPointModelBinder))]
public class GeoPoint
{
    // ....
}
最後,您可以將模型系結器提供者加入至 HttpConfiguration。 模型系結器提供者只是建立模型系結器的 factory 類別。 您可以藉由衍生自 ModelBinderProvider 類別來建立提供者。 但是,如果您的模型系結器會處理單一型別,則使用內建的 SimpleModelBinderProvider 會更容易使用,這是專為此用途所設計。 下列程式碼示範如何執行這項操作。
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var provider = new SimpleModelBinderProvider(
            typeof(GeoPoint), new GeoPointModelBinder());
        config.Services.Insert(typeof(ModelBinderProvider), 0, provider);
        // ...
    }
}
使用模型系結提供者時,您仍然必須將 [ModelBinder] 屬性加入至參數,以告知 Web API 應該使用模型系結器,而不是媒體類型格式器。 但現在您不需要在屬性中指定模型系結器的類型:
public HttpResponseMessage Get([ModelBinder] GeoPoint location) { ... }
ValueProvider
public class CookieValueProviderFactory : ValueProviderFactory
{
    public override IValueProvider GetValueProvider(HttpActionContext actionContext)
    {
        return new CookieValueProvider(actionContext);
    }
}
將值提供者 factory 新增至 HttpConfiguration ,如下所示。
public static void Register(HttpConfiguration config)
{
    config.Services.Add(typeof(ValueProviderFactory), new CookieValueProviderFactory());
    // ...
}
Web API 會撰寫所有值提供者,因此當模型系結器呼叫 ValueProvider 時,模型系結器會接收第一個可產生它的值提供者的值。
或者,您可以使用 ValueProvider 屬性,在參數層級設定值提供者 factory,如下所示:
public HttpResponseMessage Get(
    [ValueProvider(typeof(CookieValueProviderFactory))] GeoPoint location)
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号