В веб-API Dot net core У меня есть действие GetById.
[HttpGet]
[Route("Get")]
public IActionResult Get(long ID)
{
ResultResponse oResultResponse = new ResultResponse();
IActionResult response;
try
{
ContractReleaseRequest result = service.GetByID( ID);
;
oResultResponse.Returned = result;
oResultResponse.IsSucceed = true;
oResultResponse.ErrorID = EnumServiceStatus.NoError;
}
catch (Exception e)
{
oResultResponse.IsSucceed = false;
oResultResponse.ErrorID = EnumServiceStatus.ExceptionError;
oResultResponse.ErrorMessage = e.Message;
}
response = this.Ok(oResultResponse);
return response;
}
а модель ContractReleaseRequest - это.
public partial class ContractReleaseRequest
{
public ContractReleaseRequest()
{
ContractReleaseRequestTranslate = new HashSet<ContractReleaseRequestTranslate>();
RequestFile = new HashSet<RequestFile>();
}
public long ID { get; set; }
public string RequestNo { get; set; }
public long? DepartmentID { get; set; }
public string PurchaseOrderNumber { get; set; }
public DateTime? CreatedDate { get; set; }
public long? CreatedBy { get; set; }
public DateTime RequestDate { get; set; }
public bool IsSend { get; set; }
public DateTime? ModifiedDate { get; set; }
public long? ModifiedBy { get; set; }
public bool? IsDeleted { get; set; }
public Department Department { get; set; }
public Contract Contract { get; set; }
public virtual ICollection<ContractReleaseRequestTranslate> ContractReleaseRequestTranslate { get; set; }
public virtual ICollection<RequestFile> RequestFile { get; set; }
}
И модель
using Trio.Contract.Data.Models;
[MapsFrom(typeof(Data.Models.ContractReleaseRequest), ReverseMap = true)]
public class ContractReleaseRequestModel
{
//public ContractReleaseRequestModel()
//{
// ContractReleaseRequestTranslate = new HashSet<ContractReleaseRequestTranslateModel>();
// RequestFile = new HashSet<RequestFileModel>();
//}
public long ID { get; set; }
public string RequestNo { get; set; }
public long? DepartmentID { get; set; }
public string PurchaseOrderNumber { get; set; }
public DateTime? CreatedDate { get; set; }
public long? CreatedBy { get; set; }
public DateTime? ModifiedDate { get; set; }
public long? ModifiedBy { get; set; }
public bool? IsDeleted { get; set; }
public DateTime RequestDate { get; set; }
public bool IsSend { get; set; }
[IgnoreMap]
//[IgnoreMapToAttribute(typeof(DepartmentModel))]
public DepartmentModel Department { get; set; }
public ContractModel Contract { get; set; }
public ICollection<ContractReleaseRequestTranslateModel> ContractReleaseRequestTranslate { get; set; }
public ICollection<RequestFileModel> RequestFile { get; set; }
}
Когда я звоню ему с почты, он возвращается
Could not get any response There was an error connecting to http://localhost/ContractApi/api/ContractReleaseRequest/Get?ID=1.
Why this might have happened: The server couldn't send a response:Ensure that the backend is working properly Self-signed SSL certificates are being blocked: Fix this by turning off 'SSL certificate verification' in Settings > General Proxy configured incorrectly Ensure that proxy is configured correctly in Settings > Proxy Request timeout: Change request timeout in Settings > General
когда я искал, я понял, что эта ошибка, потому что основная модель содержит другие объекты или модели и не может сериализовать их в JSON, но я не знаю решения. Кто-нибудь мне поможет ??
Как я могу это сделать?
Просто не обслуживайте свой объект сущности. Создайте объект DTO и преобразуйте свою сущность в DTO. Затем верните объект DTO. Если вы убедитесь, что это решит вашу проблему, я могу продемонстрировать это в ответе.
я создал DTO и использовал automapper для сопоставления между ними, затем он вернул ту же ошибку ContractReleaseRequest result = service.GetByID (ID); var obj = Mapping.Mapper.Map <ContractReleaseRequestModel> (результат);
Можете ли вы обновить свой вопрос с помощью ContractReleaseRequestModel?
я добавил это к вопросу
Какие-либо другие объекты модели в ContractReleaseRequestModel содержат свойство ContractReleaseRequestModel?
Да, между ними существует связь, да, это что-то вроде круговой, как я могу сказать ему, чтобы он взял первый уровень и не переходил к подробным свойствам
@HodaOsama Для этой ошибки, похоже, она связана с Почтальон вместо сериализации. попробуйте запросить этот метод из веб-браузера, вы получите ожидаемый результат? Для этой ошибки попробуйте открыть почтальон-> Настройки-> Общие-> Отключить проверку сертификата SSL. Если таких настроек нет, попробуйте загрузить новый почтальон и перейдите в настройки-> из вкладки файла.
Вы должны использовать POCO для сериализации. Когда ваш объект Contract содержит объект ContractReleaseRequest и наоборот, Newtonsoft обычно не может сериализовать его из-за циклических отношений.