在 ServiceStack 服务中,我希望能够获取请求 HTTP 方案(HTTP 或 HTTPS)、主机名和端口,然后我将使用它们来构造作为 URL 数组(或列表)返回的图像的绝对路径.
服务在 ASP.NET MVC 应用程序中运行(/api 的并行场景),但这可能会在未来更改为自托管 SS,因此如果存在涵盖这两种场景的解决方案,让我们实现会很好就这样。
在 ServiceStack 服务中,我希望能够获取请求 HTTP 方案(HTTP 或 HTTPS)、主机名和端口,然后我将使用它们来构造作为 URL 数组(或列表)返回的图像的绝对路径.
服务在 ASP.NET MVC 应用程序中运行(/api 的并行场景),但这可能会在未来更改为自托管 SS,因此如果存在涵盖这两种场景的解决方案,让我们实现会很好就这样。
在每个请求或响应过滤器或任何 ServiceStack 服务中,您始终可以访问底层 HTTP Request和Response。例如如何在您的服务中访问它们:
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;
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();