接口改造需求:按英文月份名称查询对应月份投诉数据
接口改造:支持英文月份查询当月投诉数据
原接口代码如下,当前仅支持接收yyyy-mm-dd格式的日期参数,返回对应日期的Complains表数据:
[HttpGet] public HttpResponseMessage Date(String date) { try { var users = db.Complains.Where(u => u.Date == date).ToList(); return Request.CreateResponse(HttpStatusCode.OK, users); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } }
改造方案
要实现接收英文月份名称(如January、February)并返回当月所有数据,需完成以下调整:
- 兼容解析不同大小写的英文月份名称,转换为对应的月份数字(1-12)
- 修改查询逻辑,筛选
Date字段月份匹配的记录 - 增加参数格式校验,解析失败时返回400错误
修改后的代码:
[HttpGet] public HttpResponseMessage Date(String date) { try { // 解析完整英文月份名称(如January),兼容大小写 if (!DateTime.TryParseExact(date, "MMMM", CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.None, out DateTime monthDate)) { // 可选:兼容短月份缩写(如Jan、Feb) if (!DateTime.TryParseExact(date, "MMM", CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.None, out monthDate)) { return Request.CreateResponse(HttpStatusCode.BadRequest, "请输入有效的英文月份名称(如January、Feb)"); } } // 查询该月份的所有Complains数据 var complains = db.Complains.Where(u => u.Date.Month == monthDate.Month).ToList(); return Request.CreateResponse(HttpStatusCode.OK, complains); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); } }
关键说明
- 用
DateTime.TryParseExact配合"MMMM"格式解析完整英文月份,"MMM"可按需保留以支持短缩写 - 指定
en-US文化确保英文月份解析的准确性 - 新增参数校验逻辑,提前拦截无效输入
- 查询逻辑改为匹配日期字段的
Month属性,返回当月全量数据
内容的提问来源于stack exchange,提问作者Shahzad Ali
相关产品推荐
相关产品推荐

