上記の場合、CreateUri拡張メソッドを使用してオブジェクトにハイパーメディアリンクを作成する必要がある場合は、親IDを子オブジェクトに追加する必要があります。
using System;
using System.Collections.Generic;
using OpenRasta.Codecs.Razor.TestApp.Codecs;
using OpenRasta.Configuration;
using OpenRasta.Web;
namespace OpenRasta.Codecs.Razor.TestApp
{
public class Configuration : IConfigurationSource //, IDependencyResolverFactory
{
public void Configure()
{
using (OpenRastaConfiguration.Manual)
{
ResourceSpace.Has.ResourcesOfType<Person>()
.AtUri("/person/{personId}")
.HandledBy<PersonHandler>()
.AsXmlDataContract();
ResourceSpace.Has.ResourcesOfType<Subject>()
.AtUri("/person/{personId}/subjects/{subjectId}")
.HandledBy<SubjectHandler>()
.AsXmlDataContract();
}
}
}
public class SubjectHandler
{
public Subject Get(int personId, int subjectId)
{
var subject = new Subject()
{Name = string.Format("Person {0} Subject {1}", personId, subjectId), SubjectId = subjectId}; //PersonId = personId
Uri link = subject.CreateUri(); //this line will fail unless Subject has personId property.
subject.Link = link.AbsoluteUri;
return subject;
}
}
public class Subject
{
//public int PersonId {get; set;} //Need to add Parent link if using CreateUri() for OR to create link
public int SubjectId { get; set; }
public string Name { get; set; }
public string Link { get; set; }
}
public class PersonHandler
{
public Person Get(int personId)
{
return new Person() {Name = "Test" + personId, PersonId = personId};
}
}
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}
}