繁体   English   中英

Web API 可选参数

[英]Web API optional parameters

我有一个具有以下签名的控制器:

[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }

我使用以下 URI 调用此方法:

  • ~/api/products/filter?apc=AA&xpc=BB
  • ~/api/products/filter?sku=7199123

第一个 URI 没有问题。 第二个有一个奇怪的副作用。 即使未提供时 apc 和 xpc 的默认值应为 null,但参数实际上是它们的名称。 我可以通过添加额外的逻辑来克服这个问题:

apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;

这似乎是一个 hack,如果传递的值等于参数名称,则会有问题。

有没有办法在没有这种副作用的情况下定义路线?

我想通了。 我使用了一个我过去发现的如何将查询字符串映射到方法参数的坏例子。

万一其他人需要它,以便在查询字符串中包含可选参数,例如:

  • ~/api/products/filter?apc=AA&xpc=BB
  • ~/api/products/filter?sku=7199123

你会使用:

[Route("products/filter/{apc?}/{xpc?}/{sku?}")]
public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null)
{ ... }

当这些类型已经有默认值时,必须为方法参数定义默认值似乎很奇怪。

您只需要为参数设置默认值(您不需要 Route 属性):

public IHttpActionResult Get(string apc = null, string xpc = null, int? sku = null)
{ ... }

Sku 是一个整数,不能默认为字符串“sku”。 请检查可选的 URI 参数和默认值

[Route("~/api/[Controller]/AutocompleteAdress/{input=}/{input2=}")]
public IEnumerable<string> GetAutocompleteAdress(string input, string input2)

它对我有用(ASPNET WEBAPI)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM