Muh*_*ved 5 c# optional-arguments asp.net-web-api2
我需要在“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)
有什么方法可以使复杂类型成为可选参数吗?如何忽略动作过滤器中的复杂类型可选参数?
看来你不能。如果发出请求的客户端未提供复杂类型参数的值,则nullASP.NET Web API 将自动提供该值,因为它们是引用类型。
因此,无需显式地将它们设置为默认值null:
public IHttpActionResult Temp(int number, ErrorDetail errorCode, string value)
{
return Ok("good");
}
Run Code Online (Sandbox Code Playgroud)
通过删除= null上面方法签名中的默认值,有关“不支持可选参数...”的错误就会消失。
不确定操作过滤器的意图,因为您正在检查nulls 并引发异常。这意味着这些参数确实是必需的而不是可选的。
| 归档时间: |
|
| 查看次数: |
3064 次 |
| 最近记录: |