Ошибка при получении данных из Api Controller - PullRequest
0 голосов
/ 07 сентября 2018

Я работаю над клиентом форм ASP.NET Core Api и Xamarin, используя Visual Studio 2017.

Я получаю сообщение об ошибке

System.Runtime.Serialization.SerializationException: неверная строка JSON

, поскольку response.Content равно нулю, при извлечении данных из API, но при вставке этого URL в браузер "https://localhost:44305/api/Agreement/GetAgreementText/1" показывает данные в браузере. Когда я запускаю с помощью клиента, он не попадает в точку отладки метода API.

Вот мой метод APi

[HttpGet]
[Route("GetAgreementText/{id}")]
public DefaultApiResult GetAgreementText(long Id)
{
    Company com = _companyRepository.Get(Id);
    string st = com.AgreementText;

    DefaultApiResult result = new DefaultApiResult
            {
                Data = st
            };
    return result;
}

Вот мой метод вызова API приложения клиента

public string GetAgreementTextLoading(long idCompany)
{
    string agreementText = "";
    // var token = _tokenService.GetLastActivateToken().Hash;
    var clientURL = "https://localhost:44305/";
    var client = new RestClient(clientURL);
    var request = new RestRequest("api/Agreement/GetAgreementText/{Id}", Method.GET);

    request.AddUrlSegment("Id", idCompany.ToString());

    IRestResponse response = client.Execute(request);
    AppRestResponse apiResponse = SimpleJson.DeserializeObject<AppRestResponse>(response.Content);

    var statusMessage = "";

    if (apiResponse.Success)
    {
        statusMessage = "Success.";

        if (!string.IsNullOrEmpty(response.Content))
        {
            agreementText = apiResponse.Data.ToString();
        }
        else
        {
            throw new Exception("Invalid response");
        }
    }
    else
    {
        agreementText = "Error retrieving agreement text";
    }

    return agreementText;
}

public class AppRestResponse
{
    public bool Success { get; set; }
    public object Data { get; set; }
    public IEnumerable<AppRestReponseError> ErrorMessages { get; set; }
}

public class DefaultApiResult
{
        public bool Success
        {
            get
            {
                return ErrorMessages.Count == 0;
            }
            private set { }
        }

        public List<ErrorMessage> ErrorMessages { get; set; }

        public object Data { get; set; }

        public DefaultApiResult()
        {
            ErrorMessages = new List<ErrorMessage>();
        }

        public DefaultApiResult(string errorMessage)
            :this()
        {
            ErrorMessages.Add(new ErrorMessage()
            {
                Message = errorMessage
            });
        }

        public DefaultApiResult(string[] errorMessages)
            :this()
        {
            foreach (var errorMessage in errorMessages)
            {
                ErrorMessages.Add(new ErrorMessage()
                {
                    Message = errorMessage
                });
            }
        }
    }

1 Ответ

0 голосов
/ 07 сентября 2018

Я не уверен насчет SimpleJson и остального клиента, который вы используете.

Однако, если вы используете RestSharp, кажется, что здесь нет необходимости использовать SimpleJson для десериализации ответа.

Я просто удаляю следующие коды:

IRestResponse response = client.Execute(request);
AppRestResponse apiResponse = SimpleJson.DeserializeObject<AppRestResponse>(response.Content);

и добавить следующие две строки:

IRestResponse<AppRestResponse> response = client.Execute<AppRestResponse>(request);
var apiResponse= response.Data;

Работает как положено.

...