Chcę wysłać żądanie HTTP POST z treścią zawierającą informacje, które składają się na prosty wpis na blogu, nic nadzwyczajnego.Jak pobierać wartości bryły z żądania HTTP POST w ASP.NET Web API ValueProvider?
Czytałem here że gdy chcesz powiązać typu złożonego (to jest typ, który nie string
, int
etc) w sieci Web API, dobrym rozwiązaniem jest utworzenie niestandardowego modelu spoiwa.
Mam niestandardowy segregator modelu (BlogPostModelBinder
), który z kolei korzysta z niestandardowego dostawcy wartości (BlogPostValueProvider
). Czego nie rozumiem, to w jaki sposób i gdzie mogę uzyskać dane z organu wniosku w BlogPostValueProvider
?
Wewnątrz segregatora modelowego jest to, jak sądziłem, właściwy sposób na przykład pobrania tytułu.
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
...
var title= bindingContext.ValueProvider.GetValue("Title");
...
}
natomiast BlogPostValueProvider wygląda następująco:
public class BlogPostValueProvider : IValueProvider
{
public BlogPostValueProvider(HttpActionContext actionContext)
{
// I can find request header information in the actionContext, but not the body.
}
public ValueProviderResult GetValue(string key)
{
// In some way return the value from the body with the given key.
}
}
To może być rozwiązywalne w łatwiejszy sposób, ale ponieważ jestem odkrywania Web API byłoby miło, aby zmusić go do pracy.
Mój problem polega po prostu na tym, że nie mogę znaleźć miejsca przechowywania treści żądania.
Dzięki za wskazówki!
Jaki jest Twój typ zawartości żądania ... Jestem zakładając formurlencoded? ... czy mógłbyś podać więcej szczegółów, dlaczego potrzebujesz niestandardowego segregatora ... –
Jeśli publikujesz json z BlogPostVM, potrzebujesz akcji, która akceptuje BlogPostVM, nie potrzebujesz niestandardowych segregatorów. –
Myślę, że obaj jesteście poprawni. ContentType w żądaniu jest ustawione na json @KiranChalla. Posiadanie akcji z parametrem typu BlogPost może to zrobić. Nadal chciałbym wiedzieć, dlaczego nie mogę uzyskać dostępu do treści wniosku od dostawcy wartości. –