2

ServiceStackサービス内で、リクエストHTTPスキーム(HTTPまたはHTTPS)、ホスト名、およびポートを取得できるようにしたいと思います。これらを使用して、URLの配列(またはリスト)として返される画像の絶対パスを作成します。 。

サービスはASP.NETMVCアプリケーション(/ apiのサイドバイサイドシナリオ)内で実行されますが、これは将来、セルフホストSSに変更される可能性があるため、両方のシナリオをカバーするソリューションが存在する場合は、実装してもらうとよいでしょう。そのように。

4

1 に答える 1

4

すべてのリクエストまたはレスポンスフィルター、またはServiceStackサービス内では、基盤となるHTTPリクエストおよびレスポンスに常にアクセスできます。たとえば、サービスでそれらにアクセスする方法:

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をプログラムで構築する

ToUrl(method,format)ServiceStackでは、C#サービスクライアントが使用するのと同じ組み込みおよびToAbsoluteUrl(method,format)拡張メソッドを使用して、サービスの相対URLまたは絶対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 に答える