Ошибка преобразования значения в тип при публикации данных в Asp.net Core API через Postman

#c# #rest #asp.net-core #postman #asp.net-core-2.2

#c# #rest #asp.net-core #postman #asp.net-core-2.2

Вопрос:

Я разрабатываю API в Asp.net Ядро. У меня есть модели Contact и Jobtitle.

Contact.cs

 public class Contact
{
    [Key]
    public int ContactId { get; set; }

    //public string UserId { get; set; }

    [Required]
    [StringLength(20)]
    public string FirstName { get; set; }

    [StringLength(20)]
    public string MiddleName { get; set; }

    [Required]
    [StringLength(20)]
    public string LastName { get; set; }

    [StringLength(60)]
    public string FullName { get; set; }

    [Required]
    public Gender Gender { get; set; }

    [Required]
    public DateTime DateOfBirth { get; set; }

    public MaritalStatus MaritalStatus { get; set; }

    [Required]
    public JobTitle JobTitle { get; set; }

    [Required]
    [EmailAddress]
    [StringLength(50)]
    public string Email { get; set; }

    public int Phone { get; set; }

    [Required]
    public int Mobile { get; set; }

    public string Address { get; set; }
    public string Photo { get; set; }
    public bool IsDeleted { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime UpdatedOn { get; set; }
}

public enum Gender
{
    Male = 0,
    Female = 1
}

public enum MaritalStatus
{
    Unmarried = 0,
    Married = 1,
    Divorced = 2,
    Widowed = 3
}
  

Jobtitle.cs

 public class JobTitle
{
    [Key]
    public int Id { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [Required]
    [StringLength(50)]
    public string NameAr { get; set; }

    public bool IsDeleted { get; set; }
    public DateTime? CreatedOn { get; set; }
    public DateTime? UpdatedOn { get; set; }
    public virtual ICollection<Contact> Contact { get; set; }
}
  

Я использую Postman для отправки моих данных JSON для вставки нового значения в contact, но это выдает мне ошибку:

Значение JSON

 {
"firstName": "XYZ",
"middleName": "",
"lastName": "ABS",
"fullName": "XYZ ABS",
"gender": 0,
"dateOfBirth": "1987-03-05T07:49:33",
"maritalStatus": 1,
"jobTitle": "1",
"email": "demo@demo.com",
"phone": 12345678,
"mobile": 12345678,
"address": "84445 abc Hill",
"photo": "",
"isDeleted": false,
"createdOn": "2018-03-07T03:41:44",
"updatedOn": "2018-03-07T03:41:44"
}
  

Это выдает мне ошибку при преобразовании значения в объект типа Jobtitle.

 "errors": {
"jobTitle": [
  "Error converting value "1" to type 'TransConnectApi.Models.JobTitle'. Path 'jobTitle', line 9, position 17."
]
}
  

Я понимаю, что проблема в том, что API нуждается в объекте jobtitle в качестве ссылки, но я не знаю, как это сделать, поскольку он не попадает в мою точку останова post в Visual Studio. Итак, как я могу взять значение jobtitle и преобразовать его?

Комментарии:

1. JobTitle принимает значение object типа JobTitle, и вы передаете integer

Ответ №1:

Вы можете отправить объект, содержащий только Id ключ, например:

 {
  "firstName": "XYZ",
  "middleName": "",
  "lastName": "ABS",
  "fullName": "XYZ ABS",
  "gender": 0,
  "dateOfBirth": "1987-03-05T07:49:33",
  "maritalStatus": 1,
  "jobTitle": {  // here just pass object with Id key
    "Id": "1"
  },
  "email": "demo@demo.com",
  "phone": 12345678,
  "mobile": 12345678,
  "address": "84445 abc Hill",
  "photo": "",
  "isDeleted": false,
  "createdOn": "2018-03-07T03:41:44",
  "updatedOn": "2018-03-07T03:41:44"
}
  

Ответ №2:

Вы можете сделать это следующим образом:

-редактировать: Вы сказали в комментарии, и я обновил ответ. Если вы не хотите отправлять JobTitle с помощью JSON, просто удалите эту строку. Он отобразит NULL в качестве вашего объекта JobTitle. Таким образом, вы можете обработать это в бэкэнд-коде.

 {
"firstName": "XYZ",
"middleName": "",
"lastName": "ABS",
"fullName": "XYZ ABS",
"gender": 0,
"dateOfBirth": "1987-03-05T07:49:33",
"maritalStatus": 1,
"email": "demo@demo.com",
"phone": 12345678,
"mobile": 12345678,
"address": "84445 abc Hill",
"photo": "",
"isDeleted": false,
"createdOn": "2018-03-07T03:41:44",
"updatedOn": "2018-03-07T03:41:44"
}
  

Комментарии:

1. На самом деле Jobtitle уже есть в db, я не хочу добавлять новый. Я просто указываю идентификатор Jobtitle при создании нового контакта.

2. Тогда не отправляйте это. таким образом, это будет null 🙂

3. @ShabbirIsmail Проверьте отправленный ответ