我需要在“Web API 控制器操作”中将复杂类型参数设置为可选,以便空值的操作过滤器可以通过检查参数的 property 来忽略它IsOptional。我收到此错误:
“FormatterParameterBinding”不支持可选参数“errorCode”。
我有一个这样的控制器:
[Route("api/v1/Temp/{number}/{errorCode?}/{value?}")]
[HttpGet]
public IHttpActionResult Temp(int number, ErrorDetail errorCode = null, string value = null)
{
return Ok("good");
}
Run Code Online (Sandbox Code Playgroud)
并让 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());
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使复杂类型成为可选参数吗?如何忽略动作过滤器中的复杂类型可选参数?