簡體   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