Я спрашиваю, знает ли кто-нибудь, можно ли передать в Web Api конкретный класс, который наследуется от абстрактного класса.
Например:
public abstract class A{
A();
}
public class B : A{
}
[POST("api/Request/{a}")]
public class Request(A a)
{
}
В настоящее время я огляделся, и большинство решений, похоже, говорят, что использование TypeNameHandling будет работать.
JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();
jsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
Однако это не тот случай. Также моя модель передается из консольного приложения в webapi. Я прочитал, что я могу десериализовать json-объект, и, попробовав это несколько раз, я решил, что это не сработает.
Я задумался о создании привязки к клиентской модели, но не хочу, чтобы мое приложение было более сложным, чем оно должно быть. В настоящее время я унаследовал от абстрактного класса 3 модели, но в будущем это может расширить. Как вы можете заметить, добавление пользовательских привязок моделей может потребовать нескольких связующих, если только не существует способа создания одного связующего для всех типов абстрактного класса.
Чтобы развернуть это в моем консольном приложении, я создал экземпляр класса b как таковой, а затем передал его объекту ObjectContent перед отправкой на мой webapi
item = B();
//serialize and post to web api
MediaTypeFormatter formatter;
JsonMediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();
jsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
formatter = jsonFormatter;
_content = new ObjectContent<A>(item, formatter);
var response = _client.PostAsync("api/Request", _content).Result;
когда действие webapi называется объектом, имеет значение null