在ServiceStack中生成服务的URL

Cha*_*esh 5 servicestack

如何生成ServiceStack中定义的特定服务的URL?

我希望将完整或相对URL包含在其他端点中,作为响应DTO的一部分.RestServiceBase包含RequestContext.AbsoluteUri,但这完全取决于请求.

myt*_*thz 5

反向路由

Wiki中的“ 反向路由”部分显示了如何在弹出的Request DTO上使用扩展方法来生成相对和绝对URI:

如果您使用[Route]元数据属性(而不是Fluent API),则仅使用DTO就能生成强类型的URI,从而可以像使用.NET Service Clients一样使用ToUrl(HttpMethod)和创建在ServiceStack Web框架之外的URL 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
Run Code Online (Sandbox Code Playgroud)

电子邮件联系人演示展示了使用上述反向路由扩展方法到的一个例子填充HTML表单和链接在剃刀查看路线

其他反向路由扩展方法

new RequestDto().ToPostUrl();
new RequestDto().ToPutUrl();
new RequestDto().ToDeleteUrl();
new RequestDto().ToOneWayUrl();
new RequestDto().ToReplyUrl();
Run Code Online (Sandbox Code Playgroud)

访问Http请求

您还可以使用以下命令检查传入的基础httpRequest:

var httpReq = base.RequestContext.Get<IHttpRequest>();
Run Code Online (Sandbox Code Playgroud)

以及基础的ASP.NET(或HttpListener)Request对象具有:

var aspNetReq = httpReq.OriginalRequest;
Run Code Online (Sandbox Code Playgroud)

它们应包含更多更有用的属性。