. Net WebApi возвращает Jsons с форматами, отличными от среды разработки - PullRequest
2 голосов
/ 21 января 2020

У нас есть WebApi, который просто возвращает ответ JSON, подобный следующему:

[{"company": "KY C"}]

Когда мы публикуем sh WebApi, используя опцию publi sh на VS или просто копируем и вставляем на сервер, он возвращает это очень странно, и это только на этом сервере.

Ответ на рабочий сервер:

{"Версия": {"_Major": 1, "_Minor": 1, "_Build": -1, "_Revision": -1}, "Content": {"Заголовки": [{"Key": "Content-Type", "Value": ["application / json; charset = utf-8"]}]}, "StatusCode": 200, "ReasonPhrase": "OK "," Headers ": []," RequestMessage ": null," IsSuccessStatusCode ": true}

Я уже" гуглил "это безуспешно. Вот код контроллера:

    [Authorize]
    [HttpGet]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    [Route("api/Infra/GetEmpresas/{system}")]
    public HttpResponseMessage GetCompanies(string system)
    {
        logger.Debug("Start GetCompanies");
        HttpResponseMessage response = new HttpResponseMessage();
        try
        {
            if (!String.IsNullOrEmpty(system))
            {
                Companies comps = new Companies();
                var result = comps.GetCompanies(system);

                if (result != string.Empty)
                {
                    if (result.ToLower().StartsWith("error"))
                    {
                        response.StatusCode = HttpStatusCode.NotFound;
                        response.Content = new StringContent(
                            "{\"error\":\"" + result + "\"}", System.Text.Encoding.UTF8, "application/json");
                    }
                    else
                    {
                        response.Content = new StringContent(
                        result, System.Text.Encoding.UTF8, "application/json");
                    }
                }
                else
                {
                    response.StatusCode = HttpStatusCode.NotFound;
                    response.Content = new StringContent(
                        "{\"error\":\"Company not found\"}", System.Text.Encoding.UTF8, "application/json");
                }
            }
            else
            {
                response.StatusCode = HttpStatusCode.NotFound;
                response.Content = new StringContent(
                    "{\"error\":\"System was not provided\"}", System.Text.Encoding.UTF8, "application/json");
            }
        }
        catch (Exception exx)
        {
            logger.Error("Error on GetCompanies");
            logger.Error(exx);
            response.StatusCode = HttpStatusCode.InternalServerError;
            response.Content = new StringContent(
                "{\"error\":\"Error on GetCompanies\"}", System.Text.Encoding.UTF8, "application/json");
        }
        return response;
    }

Ответы [ 2 ]

1 голос
/ 22 января 2020

Решение для моего случая было очень простым. Только что обновил фреймворк до последней версии. Net, в данном случае 4.8. Сервер, на котором у нас возникла проблема, был 4.6.1586.

0 голосов
/ 21 января 2020

Вы пытались сгенерировать HttpResponseMessage, используя методы запроса CreateResponse / CreateErrorResponse?

[Authorize]
    [HttpGet]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    [Route("api/Infra/GetEmpresas/{system}")]
    public HttpResponseMessage GetCompanies(string system)
    {
        logger.Debug("Start GetCompanies");
        HttpResponseMessage response;
        try
        {
            if (!String.IsNullOrEmpty(system))
            {
                Companies comps = new Companies();
                var result = comps.GetCompanies(system);

                if (result != string.Empty)
                {
                    if (result.ToLower().StartsWith("error"))
                    {
                        response = Request.CreateErrorResponse(HttpStatusCode.NotFound, result);
                    }
                    else
                    {
                        response = Request.CreateResponse(result);
                    }
                }
                else
                {
                    response = Request.CreateErrorResponse(HttpStatusCode.NotFound, "Company not found");
                }
            }
            else
            {
                response = Request.CreateErrorResponse(HttpStatusCode.NotFound, "System was not provided");
            }
        }
        catch (Exception exx)
        {
            logger.Error("Error on GetCompanies");
            logger.Error(exx);
            response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Error on GetCompanies");
        }
        return response;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...