c# - 大摇大摆发送空值
问题描述
我正在尝试将过滤器应用到我的方法中,但是在尝试用大摇大摆发送参数时遇到问题......
这是我的方法
[HttpGet]
[Route("anyRoute")]
[ProducesResponseType(typeof(List<ViewModel>), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NoContent)]
public async Task<IActionResult> GetMehod([FromQuery] Filter filter)
{
var result = await _service.GetApproved(filter);
if (result.Count() == 0)
return NoContent();
return Ok(result);
}
这是我的过滤器
public class Filter
{
public string Filter { get; set; }
}
当我尝试调试时,我的参数为空,并且我的过滤器不起作用
解决方案
这里的问题是您的 Filter 参数与其属性之一具有相同的名称。而当你发出这样的请求时:http://localhost:5564/api/v1/TimeEntries/toBill?Filter=MockedName
ASP.Net 不知道你是想将它绑定到参数过滤器还是参数过滤器的属性。
我做了一个 PoC,构建器给了我这个警告:
严重性代码 描述 项目文件行抑制状态
警告 MVC1004 类型“FilterClass”的属性与参数“filter”同名。这可能会导致不正确的模型绑定。考虑重命名参数或使用模型绑定属性来覆盖名称。
您有 3 个选项来解决它:
1)更改参数的名称并发出完全相同的请求:
public async Task<IActionResult> GetMehod([FromQuery] Filter anyName)
{
var result = await _service.GetApproved(anyName.Filter);
if (result.Count() == 0)
return NoContent();
return Ok(result);
}
请求网址:http://localhost:5564/api/v1/TimeEntries/toBill?filter=MockedName
2) 保持您的 C# 代码不变,并根据您的请求更改查询字符串名称,添加 parameterName.PropertyName=value。
请求网址:http://localhost:5564/api/v1/TimeEntries/toBill?filter.Filter=MockedName
3)由于您只需要这个字符串,我建议您更改操作的参数类型。
public async Task<IActionResult> GetMehod([FromQuery] string filter)
{
var result = await _service.GetApproved(filter);
if (result.Count() == 0)
return NoContent();
return Ok(result);
}
如果您的 Filter 类只有一个属性,我建议您使用选项 3;否则选项1会更好。
推荐阅读
- html - 如何在导航中将右边框居中?
- r - 获取 R 中随机森林使用的变量
- javascript - javascript生成的html表中的幽灵未定义#text元素
- python - 将 for 循环转换为 List
- hyperledger-fabric - 对等点的 peer.gossip.bootstrap 属性应该设置为什么值?
- cookies - 为什么 res.cookie() 在我的sails.js 应用程序中不起作用?
- python - DataFrame Panda Python中的数组
- sql - SQL 查询总计
- javascript - 将 OpenStreetMap 构建到 WordPress 自定义插件中
- java - 如何在 Java 或 Oracle PL/SQL 中读取 DBase 文件