2012-12-26 37 views
5

में एक्सेस अनुरोध शीर्षलेख मैं डेल्फी XE3 में एक आरईएसटी सर्वर एपीआई लागू कर रहा हूं (पहली बार लगभग एक दशक में डेल्फी का उपयोग करके थोड़ा सा जंगली)। वर्तमान में यह डीबग प्रयोजनों के लिए इंडी सर्वर का उपयोग कर रहा है, लेकिन आखिरकार यह एक आईएसएपीआई डीएल होगा।डेल्फी XE3 डेटास्नेप सर्वर

अब मैंने कई TDSServerClass कक्षाएं लागू की हैं और कक्षा विधियों के भीतर अनुरोध शीर्षलेख तक पहुंच बनाना चाहते हैं। तो उदाहरण के लिए जब उपयोगकर्ता mysite.com/datasnap/rest/foo/bar का अनुरोध करता है, तो मैं बार नामक foo क्लास विधि के भीतर हेडर को पढ़ने में सक्षम होना चाहता हूं। क्या यह संभव है?

यदि नहीं, तो क्या आरईएसटी कक्षा विधि में आने से पहले इनकमिंग अनुरोधों का वैश्विक फ़िल्टर बनाना संभव है? मुझे इनकमिंग अनुरोधों पर एपीआई कुंजी और उपयोगकर्ता प्रमाणीकरण की जांच करने की आवश्यकता है और यह सुनिश्चित करने के लिए सबसे अच्छा तरीका सुनिश्चित नहीं है। धन्यवाद।

+0

आप में निर्मित प्रमाणीकरण/प्राधिकरण वस्तु का उपयोग कर रहे हैं? – jachguate

+0

नहीं। एपीआई कुंजी और उपयोगकर्ता टोकन अनुरोध हेडर में पास कर दिए गए हैं। मुझे उन्हें पढ़ने की जरूरत है। – Joel

+0

पीएस। प्रमाणीकरण सर्वर स्तर पर नहीं किया जाना चाहिए क्योंकि केवल कुछ वर्ग विधियों के लिए उपयोगकर्ता प्रमाणीकरण (टोकन) की आवश्यकता होती है, और अन्य नहीं (सभी विधियों को वैध API कुंजी की आवश्यकता होती है)। – Joel

उत्तर

2

मैं अगर कुछ भी XE3 में बदल पता नहीं है, लेकिन XE2 में आप कर सकते हैं निम्नलिखित:

uses 
    Web.HTTPApp, 
    Datasnap.DSHTTPWebBroker; 

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

तो यह सर्वर क्लास विधि के भीतर से TWebRequest ऑब्जेक्ट तक पहुंचने के सवाल का उत्तर देता है। मैं सही के रूप में चिह्नित करने जा रहा हूं, लेकिन हेडर को पार्स करने के लिए मैंने हेडर का उपयोग करने के लिए इस समाधान के साथ इस उत्तर का उपयोग किया: http://stackoverflow.com/questions/8666411/enumerate-twebrequest-http-header-fields। – Joel