mam następujące:Jak powinien działać dostawca powiązań modelu interfejsu Web API interfejsu C#?
- URL żądania: "punkt końcowy/1,2,3 q = foo?
- działanie, do którego wniosek jest zobowiązany: obiekt publiczny bar ([ModelBinder] Lista < T> id [FromUri] q ciąg)
chcę mapować „1,2,3” fragment z „id” parametru, więc stworzyłem ModelBinderProvider według this link, które powinny wywołać właściwy model spoiwa.
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;
}
}
Zarejestrowałem się z dostawcą w Global.asax takiego:
GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, new MyModelBinderProvider());
Powodem: Stworzyłem tego dostawcę, bo chcę, bez względu na to, co jest T ('1,2,3 "lub" jeden, dwa, trzy "), wiązanie do pracy.
Problem: Powiedzmy, że T to "int"; za każdym razem, gdy wysyłane jest żądanie, parametr "modelType" jest zawsze "int", a nie tym, czego się spodziewam - "List < int>", więc żądanie nie jest poprawnie obsługiwane.
Najdziwniejsze: Uprawiając jak to działa, ale T jest wyspecjalizowanym i do nich nie to, co chcę:
var simpleProvider = new SimpleModelBinderProvider(typeof(List<int>), new ListModelBinder());
GlobalConfiguration.Configuration.Services.Insert(typeof(ModelBinderProvider), 0, simpleProvider);
nie widzę, co robię źle, dlaczego jest parametrem „modelType” nie oczekiwana wartość?
Proszę rozwinąć dlaczego chcesz to zrobić? Jaki jest rzeczywisty scenariusz, który uważasz za przydatny? W związku z tym wydaje się, że jest to hack do czegoś, co może mieć bardziej skomplikowane rozwiązanie z innym URI w ogóle. –