Ho il seguente:Come dovrebbe funzionare un fornitore di raccoglitori modello API Web C#?
- richiesta url: 'endpoint/1,2,3 q = foo?'
- azione per cui la richiesta è legato: oggetto pubblico Bar ([ModelBinder] Lista < T> ids, [FromUri] stringa q)
voglio mappare il "1,2,3" frammento ai "id" parametro, così ho creato un ModelBinderProvider secondo il this link, che dovrebbe chiamare il corretto modello legante.
public class MyModelBinderProvider: ModelBinderProvider
{
public override IModelBinder GetBinder(HttpConfiguration configuration, Type modelType)
{
IModelBinder modelBinder = null;
if (modelType.IsGenericType && (modelType.GetGenericTypeDefinition() == typeof(List<>)))
{
modelBinder = new ListModelBinder();
}
return modelBinder;
}
}
ho registrato il fornitore in Global.asax come questo:
GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, new MyModelBinderProvider());
Il motivo: Ho creato questo fornitore perché voglio, non importa quale T è ('1,2,3 'o' uno, due, tre '), il legame per lavorare.
Il problema: Diciamo che T è "int"; ogni volta che viene inviata una richiesta, il parametro 'modelType' è sempre 'int' e non quello che mi aspetto - 'List < int>', quindi la richiesta non è gestita correttamente.
La strana cosa: fare qualcosa di simile funziona, ma T è specializzata e per questo non quello che voglio:
var simpleProvider = new SimpleModelBinderProvider(typeof(List<int>), new ListModelBinder());
GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, simpleProvider);
non riesco a vedere quello che sto facendo di sbagliato, perché è il parametro 'modelType' non il valore atteso?
Si prega di elaborare perché si vuole fare questo? Qual è lo scenario attuale che ritieni utile? Come tale sembra davvero un trucco per qualcosa che potrebbe avere una soluzione più elaborata con un URI diverso del tutto. –