6

在 REST 之后,建议 API 是可发现的并且应该是相互链接的。

ServiceStack 是否支持任何类型的反向路由?我正在寻找类似Url.RouteLinkASP MVC 的东西。

4

1 回答 1

8

这里陈述了一些混合的概念。

  1. 在尝试遵守 REST 的过程中,您希望将 URI 嵌入到您的响应中。
  2. 如何最好地在您的响应中嵌入 URI。您假设应该采用“反向路由”机制。

REST 风格与强类型

我想在这里明确提到一个并不意味着另一个。一方面,您希望遵循 REST 架构(使用您正在构建的任何系统),另一方面,您希望遵循使用类型化 API 的强类型化实践,在这种情况下生成外部 URI你的 API。这些风格有些不同,因为 REST 不提倡类型化 API,而是更喜欢绑定到 API 的外部 URI 表面和松散类型的 Content-Type。虽然强类型语言会建议绑定到类型化 API,例如端到端类型化 API , ServiceStack 支持开箱即用。

在 ServiceStack 中生成强类型 URI

ServiceStack 中没有明确的 ASP.NET MVC“反向路由”概念/功能,但您可以重用.NET 服务客户端用于生成和使用用户定义的自定义路由的相同功能。要使用它,您需要在 DTO 上指定您的自定义路由(即使用[Route]属性而不是 AppHost 中的流畅 API),例如:

[Route("/reqstars/search", "GET")]
[Route("/reqstars/aged/{Age}")]
public class SearchReqstars : IReturn<ReqstarsResponse>
{
    public int? Age { get; set; }
}

var relativeUrl = new SearchReqstars { Age = 20 }.ToUrl("GET");
var absoluteUrl = EndpointHost.Config.WebHostUrl.CombineWith(relativeUrl);

relativeUrl.Print(); //=  /reqstars/aged/20
absoluteUrl.Print(); //=  http://www.myhost.com/reqstars/aged/20

或者,如果您只想要绝对网址,您可以使用ToAbsoluteUriExtension 方法:

var absoluteUrl = new SearchReqstars { Age = 20 }.ToAbsoluteUri();
于 2012-12-29T08:38:52.913 回答