在上述情况下,如果您需要使用 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; }
}
}