Utilizzo di un modello comune per trasmettere vari dati HttpResponse in C #

1

Sto provando a utilizzare un'API ( tumblr ) in un'applicazione asp.net-mvc e credo che ci dovrebbe essere un modo migliore e più pulito per gestire i dati di risposta.

Ho questi modelli:

public class TumblrEnvelope
{
    [JsonProperty("meta")]
    public TumblrMeta Meta { get; set; }

    [JsonProperty("response")]
    public dynamic Response { get; set; }
}

    public class TumblrBlogInfoResponse
{
    [JsonProperty("blog")]
    public TumblrBlog Blog { get; set; }
}

e li uso per raccogliere i dati di risposta in un servizio:

public TumblrBlog GetBlog(string blogIdentifier)
    {
        var requestUrl = "..."

        var envelope = GetResponse(requestUrl);

        if(envelope.Meta.IsSuccess)
        {
            return envelope.Response.ToObject<TumblrBlogInfoResponse>().Blog;
        }
        else
        {
            return null;
        }
    }

e infine lo chiamo in un controller come questo

blog = _tumblrService.GetBlog(blogIdentifier);
if(blog == null)
{
    // something went wrong
}

Ora il problema è che posso recuperare un oggetto del blog, ma se la richiesta ha restituito una cattiva risposta nel servizio, il controller non ha idea di cosa sia successo, sa solo che non ha ricevuto un blog.

Devo deserializzare in due passaggi perché non conosco il contenuto della proprietà Response in anticipo e deve essere dinamico affinché funzioni, ma intuitivamente è un po 'sbagliato farlo in questo modo. L'API ha dozzine di risorse diverse che possono essere interrogate e sembra sbagliato creare un modello diverso per ogni risposta e aspettarsi che il Controller lo converta.

Idealmente mi piacerebbe essere in grado di restituire un oggetto risultato standard che contiene sempre il codice di stato, il messaggio di errore opzionale e l'oggetto tipicamente statico che ti aspetteresti, ma non so se è possibile farlo in modo pulito.

Mi sembra che probabilmente ci sia uno schema di progettazione che può aiutarmi, ma non so cosa cercare.

    
posta Lawyerson 04.02.2017 - 04:03
fonte

0 risposte

Leggi altre domande sui tag