在ServiceStack服务中获取请求URL,方案,主机名和端口

时间:2013-03-24 11:49:10

标签: asp.net-mvc servicestack

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

服务在ASP.NET MVC应用程序中运行(并行方案在/ api),但是这可能会在未来改变为自托管SS,因此如果存在涵盖这两种情况的解决方案,那将是很好的让我们以这种方式实施它。

1 个答案:

答案 0 :(得分: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();