2011-08-13 49 views
0

如果我希望能够通过/ Person/1和/ Person/Blair获得一个人 我该怎么做。OpenRasta路由限制

配置类:

public class RastaConfiguration : IConfigurationSource 
{ 
    public void Configure() 
    { 
     using (OpenRastaConfiguration.Manual) 
     { 

      ResourceSpace.Has.ResourcesOfType<List<Subject>>() 
       .AtUri("/Subject") 
       .HandledBy<SubjectHandler>() 
       .TranscodedBy<JsonDataContractCodec>(); 

      ResourceSpace.Has.ResourcesOfType<List<Person>>() 
       .AtUri("/Person").And.AtUri("/Person/{name}") 
       .HandledBy<PersonHandler>() 
       .TranscodedBy<JsonDataContractCodec>(); 

      ResourceSpace.Has.ResourcesOfType<Person>() 
       .AtUri("/Person/{id}") 
       .HandledBy<PersonHandler>() 
       .TranscodedBy<JsonDataContractCodec>(); 
     } 
    } 
} 

和处理

public class PersonHandler 
{ 

    private static readonly List<Person> People = new List<Person> 
              { 
               new Person {Id = 1, Name = "Blair Davidson", Subjects = new List<Subject> 
                            { 
                             new Subject{ Name = "Maths"} 
                            }}, 
               new Person {Id = 2, Name = "Esther Hew", Subjects = new List<Subject> 
                            { 
                             new Subject{ Name = "Chinese"} 
                            }} 
              }; 

    public IEnumerable<Person> Get() 
    { 
     return People; 
    } 

    public IEnumerable<Person> GetByName(string name) 
    { 
     return People.Where(x => x.Name.Contains(name)).ToList(); 
    } 

    public Person GetById(int id) 
    { 
     return People.SingleOrDefault(x => x.Id == id); 
    } 

    public OperationResult Post(Person person) 
    { 
     People.Add(person); 

     return new OperationResult.Created 
        { 
         ResponseResource = person 
        }; 
    } 


} 

有没有使用像asp.net mvc的约束呢?

任何帮助,将不胜感激。

回答

1

你会给这个URI命名(在配置中使用Named方法),并且在要将该URI绑定到HttpOperation属性的方法上具有相同的名称,同时将ForUriName属性设置为你在注册时的价值。