如何生成ServiceStack中定义的特定服务的URL?
我希望将完整或相对URL包含在其他端点中,作为响应DTO的一部分。 RestServiceBase
包含RequestContext.AbsoluteUri
,但这完全取决于请求。
答案 0 :(得分:5)
wiki中的Reverse Routing部分显示了如何在popualated Request DTO 上使用扩展方法来生成相对和绝对URI:
如果您使用[Route]
元数据属性(而不是Fluent API),您将能够仅使用DTO生成强类型URI,让您在.NET之外创建URL,就像在.NET中一样使用ToUrl(HttpMethod)
和ToAbsoluteUri(HttpMethod)
的服务客户,例如:
[Route("/reqstars/search", "GET")]
[Route("/reqstars/aged/{Age}")]
public class SearchReqstars : IReturn<ReqstarsResponse>
{
public int? Age { get; set; }
}
var relativeUrl = new SearchReqstars { Age = 20 }.ToGetUrl();
var absoluteUrl = new SearchReqstars { Age = 20 }.ToAbsoluteUri();
relativeUrl.Print(); //= /reqstars/aged/20
absoluteUrl.Print(); //= http://www.myhost.com/reqstars/aged/20
电子邮件联系人演示显示了将上述反向路由扩展方法用于populate routes for HTML Forms and Links in Razor Views的示例。
new RequestDto().ToPostUrl();
new RequestDto().ToPutUrl();
new RequestDto().ToDeleteUrl();
new RequestDto().ToOneWayUrl();
new RequestDto().ToReplyUrl();
您还可以使用以下方法检查传入的基础httpRequest:
var httpReq = base.RequestContext.Get<IHttpRequest>();
与基础ASP.NET(或HttpListener)Request对象一起使用:
var aspNetReq = httpReq.OriginalRequest;
它们应该包含更有用的其他属性。