Pergunta

Eu estou trabalhando em um cliente para um webservice que retorna códigos de status padrão (404, 200 etc) assim uma mensagem JSON personalizado.

Eu não tenho sido capaz de encontrar uma propriedade do WebException que contém a mensagem personalizada.

Algumas ideias sobre como obter um porão da mensagem?

Foi útil?

Solução

Uma solução simples:

O WebException tem a WebResponse real disponível na propriedade Response. A partir daqui é simplesmente uma questão de lidar com a resposta como por normal:

    private static JsonParseException ProcessException(WebException webEx)
    {
        var stream = webEx.Response.GetResponseStream();
        using (var memory = new MemoryStream())
        {
            var buffer = new byte[4096];
            var read = 0;
            do
            {
                read = stream.Read(buffer, 0, buffer.Length);
                memory.Write(buffer, 0, read);

            } while (read > 0);

            memory.Position = 0;
            int pageSize = (int)memory.Length;
            byte[] bytes = new byte[pageSize];
            memory.Read(bytes, 0, pageSize);
            memory.Seek(0, SeekOrigin.Begin);
            string data = new StreamReader(memory).ReadToEnd();

            memory.Close();
            DefaultMeta meta = JsonConvert.DeserializeObject<DefaultMeta>(data);
            return new JsonParseException(meta.Meta, meta.Meta.Error, webEx);
        }
    }

Eu estou usando a biblioteca NewtonSoft JSON para deserialise a resposta JSON

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top