C# 在ActionExecutedContext 对返回的数据 个别字段加密处理
时间: 2024-03-12 22:48:11 浏览: 20
在ActionExecutedContext中对返回的数据个别字段进行加密处理,可以在Controller中的OnActionExecutedAsync方法中实现。具体步骤如下:
1. 在Controller中定义一个加密方法,用于将需要加密的字段进行加密。示例代码如下:
```
private string Encrypt(string data)
{
// 这里可以使用自己喜欢的加密算法对数据进行加密
// 示例代码使用AES加密算法
var key = Encoding.UTF8.GetBytes("MySecretKey12345");
var iv = Encoding.UTF8.GetBytes("MySecretIV67890");
var dataBytes = Encoding.UTF8.GetBytes(data);
using (var aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
using (var encryptor = aes.CreateEncryptor())
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(dataBytes, 0, dataBytes.Length);
}
var encryptedBytes = ms.ToArray();
return Convert.ToBase64String(encryptedBytes);
}
}
}
```
2. 在Controller中的OnActionExecutedAsync方法中,获取返回的数据,并对需要加密的字段进行加密处理。示例代码如下:
```
public override async Task OnActionExecutedAsync(ActionExecutedContext context)
{
if (context.HttpContext.Response.ContentType == "application/json")
{
var responseJson = await new StreamReader(context.HttpContext.Response.Body).ReadToEndAsync();
var responseObj = JsonConvert.DeserializeObject<JObject>(responseJson);
// 对需要加密的字段进行加密处理
var dataToEncrypt = responseObj["SensitiveData"].ToString();
responseObj["SensitiveData"] = Encrypt(dataToEncrypt);
var encryptedJson = JsonConvert.SerializeObject(responseObj);
context.HttpContext.Response.Body = new MemoryStream(Encoding.UTF8.GetBytes(encryptedJson));
}
await base.OnActionExecutedAsync(context);
}
```
注意:在对返回的数据进行加密处理时,需要判断响应的Content-Type是否为application/json,以免对其他类型的响应数据进行加密处理。同时,需要根据返回的数据结构,确定需要加密的字段并进行加密处理。