2012-12-26 22 views
5

Tôi đang triển khai một API máy chủ REST trong Delphi XE3 (lần đầu tiên sử dụng Delphi trong khoảng một thập kỷ để có một chút gỉ). Hiện tại nó đang sử dụng máy chủ Indy cho mục đích gỡ lỗi, nhưng cuối cùng nó sẽ là một dll ISAPI.Yêu cầu truy cập tiêu đề trong Delphi XE3 DataSnap Server

Bây giờ tôi đã triển khai một số lớp TDSServerClass và muốn truy cập tiêu đề yêu cầu trong các phương thức lớp. Vì vậy, ví dụ khi người dùng yêu cầu mysite.com/datasnap/rest/foo/bar tôi muốn có thể đọc tiêu đề trong phương thức lớp foo được gọi là thanh. Điều này có thể không?

Nếu không, có thể tạo bộ lọc toàn cầu các yêu cầu gửi đến trước khi chúng đến phương thức lớp REST không? Tôi cần kiểm tra khóa API và xác thực người dùng trên các yêu cầu đến và không chắc chắn cách tốt nhất để triển khai. Cảm ơn.

+0

Bạn đang sử dụng được xây dựng trong thẩm định đối tượng/ủy quyền? – jachguate

+0

Không. Mã API và mã thông báo người dùng được chuyển vào tiêu đề yêu cầu. Tôi cần đọc chúng. – Joel

+0

ps. Không nên thực hiện xác thực ở cấp độ máy chủ vì chỉ một số phương thức lớp yêu cầu xác thực người dùng (mã thông báo) và các phương thức khác thì không (tất cả các phương thức đều yêu cầu khóa API hợp lệ). – Joel

Trả lời

2

Tôi không biết nếu bất cứ điều gì thay đổi trong XE3, nhưng trong XE2 bạn có thể làm như sau:

uses 
    Web.HTTPApp, 
    Datasnap.DSHTTPWebBroker; 

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

Vì vậy, điều này trả lời câu hỏi về cách truy cập đối tượng TWebRequest từ bên trong một phương thức lớp máy chủ. Tôi sẽ đánh dấu là đúng, nhưng để phân tích các tiêu đề tôi đã sử dụng giải pháp này cộng với câu trả lời này để truy cập các tiêu đề: http://stackoverflow.com/questions/8666411/enumerate-twebrequest-http-header-fields. – Joel

Các vấn đề liên quan