2015-12-20 5 views
1

У меня есть класс, который называется MyMethodQuery, который содержит свойство и строителя, который должен проверить, что свойство правильно заполнен:Входной параметр вебсервис метод

public class MyMethodQuery 
    { 
     public string Id { get; set; } 

     public MyMethodQuery() 
     { 
      if (string.IsNullOrEmpty(this.Id)) 
       throw new System.ArgumentException("Parameter cannot be null"); 
     } 
    } 

Мой метод:

public string MyMethod(MyMethodQuery MyMethodQuery) 
{ 
    return "it's ok !"; 
} 

Когда я называю свой метод с идентификатором Я заполнил метательное исключение:

An exception of type 'System.ArgumentException' occurred  
Additional information: Parameter can not be null 

Я не понимаю

Спасибо

+0

Вы должны инициализировать свою собственность Id. – mrsargent

+0

Я не понимаю, как это сделать, эта переменная информируется об апелляции метода напрямую (например, с помощью утилиты SoapUI) –

ответ

1

Этого следовало ожидать. При создании нового экземпляра MyMethodQuery конструктор этого класса вызывается и в этой точке поле ID по-прежнему нулевой

Вы можете изменить свой конструктор, чтобы получить начальное значение

public class MyMethodQuery 
{ 
    public string Id { get; set; } 

    public MyMethodQuery(string initialValue = "1") 
    { 
     this.Id = initialValue; 
     if (string.IsNullOrEmpty(this.Id)) 
      throw new System.ArgumentException("Parameter cannot be null"); 
    } 
} 

Конечно, это будет быть полезным, чтобы понять ваш код, если вы звоните переменные с другим именем, чем имя класса

void Main() 
{ 
    MyMethodQuery anInstance = new MyMethodQuery("1"); 
} 
+0

Эта переменная сообщается об апелляции метода напрямую (например, с помощью утилиты SoapUI) –

+0

Я делаю не понимаю, почему свойство равно null, в то время как я вымываю информацию в мыло конверта –

+0

Выполняется вызов _MyMethodQuery() _ (конструктор класса) для создания экземпляра, в котором будет установлено свойство Id. Без синтаксиса C# 6.0 для авто-свойств любая переменная экземпляра (Id в вашем случае) по-прежнему не инициализируется – Steve

0

Если вы используете C# 6 вы можете инициализировать автоматическое свойство непосредственно

public class MyMethodQuery 
{ 
    public string Id { get; set; } = "Inialized"; 

    public MyMethodQuery() 
    { 
     if (string.IsNullOrEmpty(this.Id)) 
      throw new System.ArgumentException("Parameter cannot be null"); 
    } 

}

Смежные вопросы