我正在尝试将过滤器应用到我的方法中,但是在尝试大范围发送参数时遇到了麻烦...
这是我的方法
[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; }
}
当我尝试调试时,我的参数为null,并且我的过滤器不起作用
最佳答案
这里的问题是您的Filter参数与其属性之一具有相同的名称。当您发出这样的请求时:http://localhost:5564/api/v1/TimeEntries/toBill?Filter=MockedName
ASP.Net不知道您是否要将其绑定到参数过滤器或参数过滤器的属性。
我做了一个PoC,而建造者给了我这个警告:
严重性代码说明项目文件行抑制状态
警告类型'FilterClass'的MVC1004属性具有与以下名称相同的名称
参数“过滤器”。这可能会导致错误的模型绑定。
考虑重命名参数或使用模型绑定属性
覆盖
名称。
您有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#代码不变,并在您的请求上更改querystring名称,添加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;否则,请使用选项3。否则,选项1会更好。
关于c# - 昂首阔步发送空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59213615/