2013-04-24 50 views
4

ServiceStack是全新的,因此如果這是一件容易的事,請原諒我。使用RequestFilter在ServiceStack中執行自定義身份驗證

我正在編寫一個API,它將使用自定義HTTP標頭來驗證信息。我添加了一個RequestFilter像這樣:

RequestFilters.Add((httpReq, httpResp, requestDto) => 
{ 
    if(httpReq.Headers["MyMagicHeader"] != "magic") 
    { 
     throw HttpError.Unauthorized("Unauthorized"); 
    } 
    else 
    { 
     //TODO: Populate a "Client" object accessible by the Service 
    } 
}); 

我的問題是,我怎麼能現在提供有關的服務,基於魔頭的價值,我創建了「客戶」的對象?

從外觀來看,我唯一的選擇是通過DTO傳遞這些信息。所以我想添加一個基類,所有的DTO都繼承自這個基類,而這個基類將包含一個Client屬性。

這是正確的做法嗎?

回答

3

在同一請求中傳遞所有過濾器和服務中可用信息的方法是使用httpReq.Items對象字典,例如, Dictionary<string,object>

RequestFilters.Add((httpReq, httpResp, requestDto) => 
{ 
    if(httpReq.Headers["MyMagicHeader"] != "magic") 
    { 
     throw HttpError.Unauthorized("Unauthorized"); 
    } 
    else 
    { 
     //TODO: Populate a "Client" object accessible by the Service 
     httpReq.Items["MagicToken"] = CreateMagicValue(httpReq.Headers["MyMagicHeader"]); 
    } 
}); 
+0

這是有道理的,因爲它可以防止需要在DTO揭露什麼,因此元數據。我喜歡它。只是要保持對話的情況下,開的時間長一點其他人有不同的想法。 – RMD 2013-04-24 21:15:05

相關問題