Web API可选参数
我有一个带有以下签名的控制器:
[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")] public IHttpActionResult Get(string apc, string xpc, int? sku) { ... }
我用以下URI调用此方法:
- 〜/ API /产品/过滤?APC = AA&XPC = BB
- 〜/ API /产品/过滤?SKU = 7199123
第一个URI没有问题。 第二个有一个奇怪的副作用。 即使apc和xpc的默认值在未提供时应为null,但参数实际上是它们的名称。 我可以通过添加额外的逻辑来克服这个问题:
apc = (apc == "apc") ? null : apc; xpc = (xpc == "xpc") ? null : xpc;
这似乎是一个黑客攻击,如果传递的值等于参数名称,则会出现问题。
有没有办法定义路线没有这种副作用?
我想到了。 我使用的是一个糟糕的例子,我在过去发现如何将查询字符串映射到方法参数。
如果其他人需要它,为了在查询字符串中有可选参数,例如:
- 〜/ API /产品/过滤?APC = AA&XPC = BB
- 〜/ API /产品/过滤?SKU = 7199123
你会用:
[Route("products/filter/{apc?}/{xpc?}/{sku?}")] public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null) { ... }
当这些类型已经有默认值时,必须为方法参数定义默认值似乎很奇怪。
Sku是一个int,不能默认为字符串“sku”。 请检查可选URI参数和默认值