2010-09-22 19 views
3

Supposons que j'ai une ressource comme ci-dessous:OpenRasta retour liste via JsonDataContractCodec

namespace OpenRastaApp.Resources 
{ 
    public class Foo 
    { 
     public string Bar { get; set; } 
    } 
}

un gestionnaire comme:

namespace OpenRastaApp.Handlers 
{ 
    public class FooHandler 
    { 
     public object GetAll() 
     { 
      ArrayList foos = new ArrayList(); 
      foos.Add(new Foo() { Bar = "Hello," }); 
      foos.Add(new Foo() { Bar = " world!" }); 
      List<Foo> result = new List<Foo>(foos.ToArray(typeof(Foo)) as Foo[]); 
      return result; 
     } 
     public object Get(int id) 
     { 
      return new Foo() { Bar = "Baz" }; 
     } 
    } 
}

et une configuration comme:

namespace OpenRastaApp 
{ 
    public class Configuration : IConfigurationSource 
    { 
     public void Configure() 
     { 
      using (OpenRastaConfiguration.Manual) 
      { 
       ResourceSpace.Has.ResourcesOfType<Foo>() 
        .AtUri("/foos") 
        .And.AtUri("/foos/{id}") 
        .HandledBy<FooHandler>() 
        .AsJsonDataContract(); 
      } 
     } 
    } 
}

/foos/1 Rend comme prévu avec:

{"Bar":"Baz"}

Cependant,/foos ne rend pas du tout. La console de débogage affiche le message "8- [2010-09-22 13: 39: 29Z] Information (0) Aucun codec de réponse n'a été recherché L'entité de réponse est null ou un codec de réponse est déjà défini." J'ai vérifié que le résultat est non nul avant de revenir. J'ai également essayé de retourner un Foo [], mais cela a eu la même erreur.

Répondre

3

Compris. Nous avons dû modifier ma configuration comme suit:

namespace OpenRastaApp 
{ 
    public class Configuration : IConfigurationSource 
    { 
     public void Configure() 
     { 
      using (OpenRastaConfiguration.Manual) 
      { 
       ResourceSpace.Has.ResourcesOfType<List<Foo>>() 
        .AtUri("/foos") 
        .HandledBy<FooHandler>() 
        .AsJsonDataContract(); 
       ResourceSpace.Has.ResourcesOfType<Foo>() 
        .AtUri("/foos/{id}") 
        .HandledBy<FooHandler>() 
        .AsJsonDataContract(); 
      } 
     } 
    } 
}
+6

Oui, nous devrions vraiment mettre à jour la documentation. Les listes de choses et de choses sont deux ressources différentes. Nous devrions au moins avoir une information d'avertissement/débogage pour faire savoir aux gens – SerialSeb

+0

Une autre option serait d'utiliser une liste dans les deux cas. C'est le chemin que j'ai commencé, au moins. – pc1oad1etter

+0

Une sorte d'étape d'analyse de la configuration au démarrage seb? Il pourrait éventuellement produire des informations sur «Qu'est-ce que j'ai» et l'URI pour le débogage interne avec les types de média supportés par chaque type? – Psiren

0

Juste Pour votre information, vous pouvez également avoir fait ce qui suit:

ResourceSpace.Has.ResourcesOfType<Foo>() 
    .AtUri("/foos/{id}") 
    .HandledBy<FooHandler>() 
    .AsJsonDataContract(); 
ResourceSpace.Has.ResourcesOfType<List<Foo>>() 
    .WithoutUri 
    .AsJsonDataContract();