2

在 ServiceStack 服务中,我希望能够获取请求 HTTP 方案(HTTP 或 HTTPS)、主机名和端口,然后我将使用它们来构造作为 URL 数组(或列表)返回的图像的绝对路径.

服务在 ASP.NET MVC 应用程序中运行(/api 的并行场景),但这可能会在未来更改为自托管 SS,因此如果存在涵盖这两种场景的解决方案,让我们实现会很好就这样。

4

1 回答 1

4

在每个请求或响应过滤器或任何 ServiceStack 服务中,您始终可以访问底层 HTTP RequestResponse。例如如何在您的服务中访问它们:

public class MyService : Service
{ 
    public object Get(Request request) 
    {
        var scheme = base.Request.IsSecureConnection ? "https" : "http";
        base.Response...
    }
}

如果您需要访问底层 HTTP 请求或响应,您始终可以通过以下方式访问它们:

var aspnetRequest = (HttpRequest) base.Request.OriginalRequest;
var aspnetResponse = (HttpResponse) base.Request.OriginalResponse;

以编程方式构建服务的 URL

ServiceStack 允许您使用 C# 服务客户端使用的相同内置ToUrl(method,format)ToAbsoluteUrl(method,format)扩展方法为服务构建相对或绝对 url:

[Route("/customers")]
[Route("/customers/{Id}")]
public class Customers : IReturn<List<Customer>>
{
    public int? Id { get; set; }
}

鉴于上述请求 DTO 和定义的路由,您可以构造以下 url,这些 url 将使用最相关的 url 来创建 url,例如:

var relativeUrl = new Customers().ToUrl(); // /customers
var absoluteUrl = new Customers().ToAbsoluteUri(); // http://host/api/customers

// /customers/1
var relativeIdUrl = new Customers { Id = 1 }.ToUrl();  
// http://host/api/customers/1
var absoluteIdUrl = new Customers { Id = 1 }.ToAbsoluteUri();  
于 2013-03-24T16:54:03.907 回答