gpt4 book ai didi

c# - 复杂类型作为 web api 操作中的可选参数

转载 作者:行者123 更新时间:2023-11-30 12:56:22 25 4
gpt4 key购买 nike

我需要在“Web API Controller 操作”中将复杂类型参数设置为可选,以便我的空值操作过滤器可以通过检查参数的属性 IsOptional 来忽略它。我收到此错误:

Optional parameter 'errorCode' is not supported by 'FormatterParameterBinding'.

我有一个这样的 Controller :

[Route("api/v1/Temp/{number}/{errorCode?}/{value?}")]
[HttpGet]
public IHttpActionResult Temp(int number, ErrorDetail errorCode = null, string value = null)
{
return Ok("good");
}

并让 actionFilter 像这样检查空值:

public override void OnActionExecuting(HttpActionContext actionContext)
{
var parameters = actionContext.ActionDescriptor.GetParameters();
foreach (var param in parameters)
{
if (param.IsOptional)
continue;

object value = null;

if (actionContext.ActionArguments.ContainsKey(param.ParameterName))
value = actionContext.ActionArguments[param.ParameterName];

if (value == null)
throw new GasException((ulong)ErrorCodes.NullValue, ErrorCodes.NullValue.GetDescription());
}
}

有什么方法可以使复杂类型成为可选参数吗?如何忽略 action-filter 中复杂类型的可选参数?

最佳答案

看来你做不到。如果发出请求的客户端没有为复杂类型参数提供值,那么 ASP.NET Web API 将自动将其作为 null 提供,因为它们是引用类型。

因此,无需为它们显式设置默认值 null:

public IHttpActionResult Temp(int number, ErrorDetail errorCode, string value)
{
return Ok("good");
}

通过删除上面方法签名中的 = null 默认值,有关“不支持可选参数...”的错误将消失。

不确定您的操作过滤器的意图,因为您正在检查 null 并抛出异常。这意味着这些参数确实必需而不是可选的。

关于c# - 复杂类型作为 web api 操作中的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41691624/

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