gpt4 book ai didi

c# - 招摇发送空值

转载 作者:太空宇宙 更新时间:2023-11-03 22:28:55 25 4
gpt4 key购买 nike

我正在尝试将过滤器应用到我的方法中,但是在尝试使用 swagger 发送参数时遇到了问题...

这是我的方法

        [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 不知道您是否要将其绑定(bind)到参数filter 或参数过滤器的属性。

我做了一个 PoC,构建者给了我这个警告:

Severity Code Description Project File Line Suppression State

Warning MVC1004 Property on type 'FilterClass' has the same name as parameter 'filter'. This may result in incorrect model binding. Consider renaming the parameter or using a model binding attribute to override the name.

你有 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 会更好。

关于c# - 招摇发送空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com