我正在爲外部移動公司構建一個WebAPI(我所做的只是公開服務)。WebAPI可以在響應之前更改輸出嗎?
眼下,我們的DB使用非加密值列,如:
- 對象ID
- 策略ID
- 等。
但是現在,當我們揭露它,我需要加密值。 (只有服務器可以解密值,移動公司不關心實際值)。
我不想開始摘要每手動存儲過程響應並用加密值替換值。 (不要忘記,我們的內部服務器不是而是使用加密值 - 它定期使用數據)。
OK這裏是一個活生生的例子:
我有這樣的控制器代碼:
[HttpGet]
[ActionName("test2")]
public HttpResponseMessage test2(int id)
{
var Data = GetDataFromSource_1();
// or from GetDataFromSource_2();
return Request.CreateResponse(HttpStatusCode.OK, Data);
}
哪裏GetDataFromSource_1
是通過動態列表(只是模擬源)
public IEnumerable GetDataFromSource_1()
{
List<dynamic> lst = new List<dynamic>();
lst.Add(new
{
objId = 1,
myOtherColumn = 5
});
lst.Add(new
{
objId = 2,
myOtherColumn = 8
});
return lst;
}
而且
GetDataFromSource_2
是經由數據表(只是爲了模擬另一個源)
public DataTable GetDataFromSource_2()
{
DataTable dt = new DataTable("myTable");
dt.Columns.Add("objId", typeof(int));
dt.Columns.Add("myOtherColumn", typeof(int));
DataRow row = dt.NewRow();
row["objId"] = 1;
row["myOtherColumn"] = 5;
dt.Rows.Add(row);
row = dt.NewRow();
row["objId"] = 2;
row["myOtherColumn"] = 8;
dt.Rows.Add(row);
return dt;
}
兩種產量此JSON響應:
{ 「結果」:{ 「成功」:真, 「消息」: 「」}, 「數據」:[{ 「OBJID」:1, 「myOtherColumn」:5},{ 「OBJID」:2 「myOtherColumn」:8}]}
問題
如何(和wher E)我可以掃描響應(這是將被髮送的內容),並替換爲在每一個柱(和僅他們的):
- 的ObjectID
- 策略ID
- 等。
到加密值?
例如:
我想輸出是:
{
"Result": {
"Success": true,
"Message": ""
},
"Data": [{
"objId": "XXX_the_encrypted_valueXXX",
"myOtherColumn": 5
}, {
"objId": "XXX_the_encrypted_valueXXX": ,
"myOtherColumn": 8
}]
}
(其中"XXX_the_encrypted_valueXXX"
是舊值的加密值。)
NB它可假設我有Utils.Encrypt(string st)
方法。
此外,我們沒有實體,所以我不能裝飾實體。我需要插件時創建JSON
是加密變量所有metohd電話一樣嗎?或者它們有所不同? – 2014-11-24 10:41:20
@yuval,無論如何,如果響應結果中包含一個名爲:(查找)的列,請將其值轉換爲加密的值 – 2014-11-24 10:43:19
這些列名在所有查詢中是否相同或是否有所不同?你怎麼知道哪個列名需要加密? – 2014-11-24 10:44:12