我需要在' Web API控制器操作'中创建一个复杂的类型参数,以便我的空值操作过滤器可以通过检查参数的属性IsOptional
来忽略它。我收到此错误:
可选参数' errorCode' ' FormatterParameterBinding'。
不支持
我有一个像这样的控制器:
[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中忽略复杂类型的可选参数?
答案 0 :(得分:0)
看起来你似乎没有。如果发出请求的客户端未提供复杂类型参数的值,则ASP.NET Web API将自动将其作为null
提供,因为它们是引用类型。
因此,无需使用默认值null
明确设置它们:
public IHttpActionResult Temp(int number, ErrorDetail errorCode, string value)
{
return Ok("good");
}
通过删除上面方法签名中的= null
默认值,关于"不支持可选参数的错误..."走了。
由于您正在检查null
并抛出异常,因此无法确定您的操作过滤器的意图。这意味着那些参数确实必需不是可选的。