ASP.NET Web API GET方法中如何移除泛型输出的特殊字符
在ASP.NET Web API中移除泛型响应的特殊字符
针对你的场景,有几种实用方法可以处理泛型输出中的特殊字符,无需直接操作字符串响应:
方法1:遍历集合,逐个清理实体属性
直接在返回前遍历IEnumerable<EMPLookup>集合,对每个实体的字符串属性用Regex.Replace处理:
[Route("api/LookUp/GetEmpresult/{EmpId}")] [HttpGet] public IEnumerable<EMPLookup> GetEmpresult(string EmpId) { EMPDataAccess empdb = new EMPDataAccess(); var empList = empdb.GetEmp(EmpId); // 遍历每个员工实体,清理字符串属性的特殊字符 foreach (var emp in empList) { // 示例:清理Name属性,保留字母、数字、空格、点、横杠,移除其他特殊字符 if (!string.IsNullOrEmpty(emp.Name)) { emp.Name = Regex.Replace(emp.Name, @"[^\w\s.-]", ""); } // 同理处理其他字符串属性,比如Address、Email等 if (!string.IsNullOrEmpty(emp.Address)) { emp.Address = Regex.Replace(emp.Address, @"[^\w\s.-]", ""); } } return empList; }
注:正则表达式
@"[^\w\s.-]"可根据需求调整,比如要保留逗号、问号,就改成@"[^\w\s.,?\-]"。
方法2:给实体属性加自定义序列化转换器
如果希望全局自动处理该实体的序列化,不用每次在控制器写逻辑,可以给EMPLookup的字符串属性添加自定义Json转换器(以Newtonsoft.Json为例):
步骤1:创建自定义转换器
public class CleanSpecialCharsConverter : JsonConverter { // 定义允许保留的字符规则 private readonly Regex _cleanRegex = new Regex(@"[^\w\s.-]"); public override bool CanConvert(Type objectType) { // 只处理字符串类型 return objectType == typeof(string); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var value = reader.Value as string; return string.IsNullOrEmpty(value) ? value : _cleanRegex.Replace(value, ""); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var strValue = value as string; var cleanedValue = string.IsNullOrEmpty(strValue) ? strValue : _cleanRegex.Replace(strValue, ""); writer.WriteValue(cleanedValue); } }
步骤2:给实体属性标记转换器
public class EMPLookup { [JsonConverter(typeof(CleanSpecialCharsConverter))] public string Name { get; set; } [JsonConverter(typeof(CleanSpecialCharsConverter))] public string Address { get; set; } // 其他属性... }
这样只要返回EMPLookup实体,序列化时会自动清理指定属性的特殊字符。
方法3:全局配置格式化器(所有字符串属性生效)
如果要让整个API的所有字符串响应都自动清理特殊字符,可在WebApi配置中全局添加转换器:
在WebApiConfig.cs的Register方法中:
public static void Register(HttpConfiguration config) { // 其他路由、过滤器配置... // 获取Json格式化器,添加自定义转换器 var jsonFormatter = config.Formatters.JsonFormatter; jsonFormatter.SerializerSettings.Converters.Add(new CleanSpecialCharsConverter()); }
此方法会对所有API返回的字符串属性生效,无需逐个实体配置。
内容的提问来源于stack exchange,提问作者Sarthak Mishra
相关产品推荐
相关产品推荐

