ServiceStack是否支持反向路由?

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

ServiceStack是否支持任何类型的反向路由? 我在ASP MVC中寻找像Url.RouteLink这样的东西。

这里有一些混合概念。

  1. 在尝试遵守REST的过程中,您希望在回复中嵌入URI。
  2. 如何最好地在您的回复中嵌入URI。 你假设一个“反向路由”机制是应该如何做到的。

REST样式与强类型

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

在ServiceStack中生成强类型URI

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

 [Route("/reqstars/search", "GET")] [Route("/reqstars/aged/{Age}")] public class SearchReqstars : IReturn { 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 

或者,如果您只想要Absolute Url,则可以使用ToAbsoluteUri Extension方法:

 var absoluteUrl = new SearchReqstars { Age = 20 }.ToAbsoluteUri();