Это невозможно легко . Взаимодействие с моделью в Web API принципиально отличается от MVC, и вам нужно будет написать MediaTypeFormatter, который будет считывать поток файлов в вашу модель и дополнительно связывать примитивы, которые могут быть значительно сложными.
Самое простое решение: для захвата потока файлов с запроса с использованием некоторого типа MultipartStreamProvider
и других параметров с использованием коллекции значений имени FormData
с этого провайдера
Пример - http://www.asp.net / web-api / overview / work-with-http / send-html-form-data, -part-2 :
public async Task PostFormData()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
try
{
await Request.Content.ReadAsMultipartAsync(provider);
// Show all the key-value pairs.
foreach (var key in provider.FormData.AllKeys)
{
foreach (var val in provider.FormData.GetValues(key))
{
Trace.WriteLine(string.Format("{0}: {1}", key, val));
}
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
Используйте свойство.
Я думаю, что имущество должно быть полностью ответственным за управление этим месторождением.
Есть много реализаций, где это не имеет значения, но есть много, где это имеет значение - много. Кроме того, это может быть немного боли, чтобы отслеживать, потому что она всегда выглядит .
Вы пойдите не так, как вы не позвуты на гораздо меньше времени, чем звонить в поле, и где там исключения из этого правила, документируют обоснование.
Просто добавить еще одну вещь, ваш пример спросил только о GetTers. Другая половина этого - загадка.
Иногда вы захотите, чтобы объект использовал поселенцы, а иногда вы хотели бы обходить их и просто назначить основное поле.
Например, скажем, у вас есть свойство под названием ISModified. Что бы сказать вам всякий раз, когда объект был изменен. Вы можете перевернуть все ваши загадки, чтобы верно в случае, если другое значение присваивается одному из основных полей.
Теперь, если вы увлажняете этот объект (либо загрузка с DB или где-то еще), то вы не хотите, чтобы ISModified Set. Потому что, совсем честно говоря, это еще не модифицировано. Таким образом, в этом методе вы используете базовые имена поля, но во всех других методах вы используете Setter свойств.
Это зависит, вы хотите сделать то, что делает свойство? Частная / публика на самом деле не имеет значения, это просто как позвонить в функцию.
Как и оно, вы действительно просто создали «функцию» в ожидании необходимости что-то делать всякий раз, когда это значение доступно или изменено.
Проблема с этим, вы можете прийти к тому, что вы хотите сделать одну вещь, где его доступен в некоторых местах, а другой, когда он доступа к другим местам, поэтому вы все еще должны будут изменить все «звонки» к нему в одном из мест.
Факт вопроса - это, если все, что доступ к этой переменной - даже функции частного класса - делает это через свойство, которое просто проходит через переменную, зачем вообще иметь свойство? Почему бы не просто создать переменную, называемую «MyVariable», то, если вы обнаружите, что хотите сделать что-то, когда его изменили / доступен, просто создайте другую переменную, называемую _MyVariable или что-то, а затем измените MyVariable, чтобы тогда быть недвижимостью для _MyVariabiable.
Вы должны подумать о свойствах как о том, что такие, как функции Accessor () и Mutator (), которые вы использовали для написания, трюк с ними было, если вы обнаружили, что вы хотите сделать какой-то код всякий раз, когда переменная была «доступен» Вы должны были изменить все вызовы на эту переменную для вместо этого Accessor (вызов функции, а не просто доступ к переменной элементарии), именно поэтому вы создали «по умолчанию» доступными и матадорами, на всякий случай. Как я уже говорил выше, у вас нет этой проблемы с C # и свойствами (за исключением того, что в одном случае, если вы не можете написать в суб-членах члена, если его свойство ... почему ??)
Это действительно будет зависеть от того, что вы получаете к немуществу. Рассмотрим следующие два сценария:
Сценарий 1: вы пишете метод, чтобы обеспечить общие действия на данные в классе:
// assume a hypothetical class Position
public class Circle
{
private int _radius;
private int _xpos;
private int _ypos;
public int Radius { get { return _radius; } }
public Position Center { get { return new Position(_xpos, _ypos); } }
public bool PointInCircle(Position other)
{
return distance(this.Center, other) < this.Radius;
}
}
Очевидно, что поведение точечного точка должно быть таким же, как если пользователь выполнил код внутри него. Поэтому имеет смысл использовать публичные свойства.
Сценарий 2: Вы пишете метод для манипулирования основными данными. Хорошим примером этого является сериализация. Вы хотели бы сериализовать основные элементы данных, в отличие от значений, возвращаемых доступами имущества.
-121--2975491-Зависит от того, если вы получаете доступ к свойству, может быть «проверка», который называется, который называется.
private int timeSinceLastPropertyAccess;
public int TimeSinceLastPropertyAccess
{
get
{
// Reset timeSinceLastPropertyAccess to 0
int a = timeSinceLastPropertyAccess;
timeSinceLastPropertyAccess = 0;
return a;
}
}
Вы хотите, чтобы TimesIncelastPropertyAccess можно сбросить, когда он используется, когда внутри вашего класса или нет?
Это действительно будет зависеть от того, для чего вы обращаетесь к свойству. Рассмотрим следующие два сценария:
Scenario 1: Вы пишете метод, обеспечивающий общее действие на данные в классе:
// assume a hypothetical class Position
public class Circle
{
private int _radius;
private int _xpos;
private int _ypos;
public int Radius { get { return _radius; } }
public Position Center { get { return new Position(_xpos, _ypos); } }
public bool PointInCircle(Position other)
{
return distance(this.Center, other) < this.Radius;
}
}
Очевидно, что поведение PointInCircle должно быть таким же, как если бы пользователь выполнял код внутри него. Поэтому имеет смысл использовать общие свойства.
Сценарий 2: вы пишете метод для манипулирования базовыми данными. Хорошим примером этого является сериализация. Вы захотите сериализовать члены базовых данных в отличие от значений, возвращаемых аксессуарами свойств.