2012-12-26 11 views
5

Delphi XE3'te bir REST sunucu API'si uyguluyordum (yaklaşık on yıl içinde Delphi'yi kullanarak ilk kez biraz paslıyım). Şu anda, hata ayıklama amaçları için Indy sunucu kullanıyor, ancak sonunda bir ISAPI dll olacaktır.Delphi XE3 Erişim İsteği Başlığı DataSnap Server

Şimdi bir dizi TDSServerClass sınıfı uyguladıktan sonra sınıf yöntemleri içindeki istek başlığına erişmek istiyorum. Örneğin, kullanıcı mysite.com/datasnap/rest/foo/bar talep ettiğinde, başlık çubuğunu çağıran foo sınıfı yönteminde okumak istiyorum. Mümkün mü?

Değilse, REST sınıf yöntemine ulaşmadan önce gelen isteklerin genel bir filtresini oluşturmak mümkün mü? Gelen isteklerde API anahtarını ve kullanıcı kimlik doğrulamasını kontrol etmem ve en iyi yöntemin uygulandığından emin olmam gerekiyor. Teşekkürler.

+0

yerleşik kimlik doğrulama/yetkilendirme nesne kullanıyor musunuz? – jachguate

+0

Hayır. API anahtarı ve kullanıcı jetonu istek başlığında iletilir. Onları okumam gerek. – Joel

+0

ps. Kimlik doğrulama, yalnızca bazı sınıf yöntemleri kullanıcı kimlik doğrulaması (belirteç) gerektirdiğinden ve diğerleri yapmadığından (tüm yöntemler geçerli bir API anahtarı gerektirdiğinden) sunucu düzeyinde yapılmamalıdır. – Joel

cevap

2

şey XE3 değişti eğer bilmiyorum ama XE2'de aşağıdakileri yapabilirsiniz:

uses 
    Web.HTTPApp, 
    Datasnap.DSHTTPWebBroker; 

function TServerMethods1.EchoString(Value: string): string; 
var 
    Module: TWebModule; 
begin 
    Module := GetDataSnapWebModule; 
    Result := Module.Request.RemoteIP + ': ' + Value; 
end; 
+1

Bu, bir sunucu sınıfı yönteminden TWebRequest nesnesine nasıl erişileceği sorusunu yanıtlıyor. Doğru olarak işaretleyeceğim, ancak başlıkları ayrıştırmak için bu çözümü ve bu yanıtı başlıklara erişmek için kullandım: http://stackoverflow.com/questions/8666411/enumerate-twebrequest-http-header-fields. – Joel

İlgili konular