在ASP.NET WebAPI中为您的资源生成超链接是否有任何可靠的指导?我已经阅读了几篇帖子:
http://codebetter.com/glennblock/2012/01/08/hypermedia-and-web-api-design-brain-dump-and-samples/
http://blog.ploeh.dk/2012/04/17/HyperlinkingWithTheASPNETWebAPI.aspx
虽然提供了丰富的信息,但似乎没有来自Microsoft或其他方面的具体指导,无论如何最好地实现资源链接(即在服务层使用DTO实现的对象模型)。如果我们正在使用WebAPI来实现真正的RESTful服务,那么超链接至关重要,我希望在WebAPI中为此提供内置的支持/指导。
我正在尝试实现此功能的一个简单示例是使用Contact实体,该实体具有Addresses集合和SupportIncident集合。 基于我引用的第一篇文章的类定义看起来像这样:
public class Link
{
public Uri Uri { get; set; }
public string Rel { get; set; }
public string Name { get; set; }
}
public class ContactDTO
{
public int ID { get; set; }
public string Name { get; set; }
public IList<AddressDTO> Addresses { get; set; }
public IList<IncidentDTO> Incidents{ get; set; }
public IList<Link> Links { get; set; }
}
WebAPI非常擅长通过HTTP(xml / json)公开此模型以及资源上的GET / PUT / POST / DELETE操作,但为了构建真正的RESTful服务,我想知道是否 a)WEBAPI中是否存在对链路生成的固有支持? b)是否有适当的指导来公开上面包含资源链接的模型,以及如果客户端将链接作为有效负载的一部分发送,API应该如何处理PUT / POST。这些应该被忽略吗?
答案 0 :(得分:1)
在我看来,Ben Foster在这方面做得很好。请参阅以下博文:
基本思想是,您将通过消息处理程序修改ObjectContent
的{{1}}属性。此消息处理程序将此工作委托给已注册的所谓“响应Enrichers”,并且每个人都有机会评估它是否可以丰富对象类型。
答案 1 :(得分:0)
我构建了一个示例应用程序,演示了如何在Web API here中使用Hypermedia。这里有另一个https://github.com/webapibook/issuetracker,Amy Palamountain在这里有另一个很好的例子https://github.com/ammeep/hyper-library。
使用DTO和链接的主要问题之一是默认情况下,这些DTO会被序列化为application/json
或application/xml
。这些媒体类型都没有关于如何序列化链接的任何规范。因此,客户需要有关如何处理这些链接的带外知识。
要正确执行超媒体,您需要使用支持超媒体的媒体类型,例如xhtml,hal,collection + json,json-ld,siren。