2013-02-09 82 views
2

是否有任何可靠的指導來爲ASP.NET WebAPI中的資源生成超鏈接?我讀了一些文章對這樣的: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

儘管內容翔實,似乎是從微軟或沒有具體的指導,否則在如何最好地實現你的資源鏈接條款(即在服務層使用DTO實現的對象模型)。如果我們正致力於使用WebAPI來實現真正的RESTful服務,那麼超鏈接是至關重要的,而且我期望在WebAPI中爲此提供支持/指導。

我試圖實現這個的一個簡單示例是使用具有地址集合和SupportIncident集合的Contact實體。 基礎上的第一篇文章,我引用看起來像這樣的類定義:

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

您是否考慮過Web API的OData支持?這對你正在尋找的超鏈接和平靜的語義有着豐富的支持。 http://blogs.msdn.com/b/webdev/archive/2013/01/29/getting-started-with-asp-net-webapi-odata-in-3-simple-steps.aspx – 2013-02-11 16:29:24

+0

目前OData支持半烤,似乎並不容易融入。除此之外,我還必須定義一個EDM模型 – 2013-02-13 06:29:20

+1

你最終爲這個問題提出了什麼@Abhijeet? – Tr1stan 2014-07-29 15:08:38

回答

1

在我看來,Ben Foster在這方面做得很好。請參見下面的博客文章:

的基本想法是,你將修改途中ObjectContentValue地產出通過消息處理程序。這個消息處理程序將這些工作委託給已註冊的所謂「響應聚合器」,並且它們中的每一個都有機會評估它是否可以豐富對象類型。

+1

我也看到了這篇文章,並且實際上向Ben介紹了他的方法和缺乏本地支持。我在這種方法中遇到的最大問題是,您的邏輯現在分散在業務層邏輯,控制器邏輯和「Enricher」邏輯之間。 Glenn Block的意見是保持鏈接生成選項更接近控制器,我同意。此外,每個實體擁有更豐富的內容將很快導致可管理性問題。如果你的模型有100個實體......你做數學:-) – 2013-02-10 23:05:06

0

我構建了一個示例應用程序,演示在Web API中使用超媒體here。在這裏還有另外一個https://github.com/webapibook/issuetracker和艾米Palamountain在這裏有另一個很好的例子https://github.com/ammeep/hyper-library

使用DTO和鏈接的主要問題之一是,默認情況下,這些DTO將被序列化爲application/jsonapplication/xml。這兩種媒體類型都沒有關於如何鏈接鏈接的規範。因此,客戶需要關於如何處理這些鏈接的帶外知識。

要正確執行超媒體,您需要使用支持超媒體的媒體類型,如xhtml,hal,collection + json,json-ld,siren。