此應(yīng)用程序基于 ASP.Net Core (.NET Core 2.1) 構(gòu)建。我正在嘗試配置一個(gè)控制器(見(jiàn)RiskController下文)以通過(guò) http get 支持以下內(nèi)容:按 ID ( /api/risk/0000001) 獲取應(yīng)返回單個(gè)風(fēng)險(xiǎn)圖按名稱(chēng)查找 ( /api/risk/some%20company%20name) 應(yīng)返回搜索結(jié)果數(shù)組/api/risk/0000002/validate如果 id 存在,驗(yàn)證 ID ( ) 應(yīng)返回真/假非常簡(jiǎn)單的東西,當(dāng)參數(shù)值非常適合每個(gè)動(dòng)作時(shí),這一切都有效。我正在使用正則表達(dá)式來(lái)限制動(dòng)作,這很有幫助。我的控制器聲明: [Produces( "application/json" )] [Route( "api/[controller]" )] [Authorize] [ApiController] public class RiskController : ControllerBase通過(guò) ID 操作獲取: // GET api/risk/0000001 [HttpGet( "{riskId:regex(^\\d{{7}}|(SI[[PG]]|JPA|DEM)\\d{{4}})}", Order = 0 )] public async Task<IActionResult> Get( string riskId ) { ... }按名稱(chēng)查找操作: // GET api/risk/some%20company%20name [HttpGet( "{name:length(2,30)}", Order = 1 )] public async Task<IActionResult> Search( string name ) { ... }驗(yàn)證 ID 操作: // GET api/risk/0000001/validate [HttpGet( "{riskId:regex(^\\d{{7}}|(SI[[PG]]|JPA|DEM)\\d{{4}})}/[action]", Order = 2 )] public async Task<IActionResult> Validate( string riskId )ID 始終為 7 位字符串,或以 SIP、SIG、JPA 或 DEM 開(kāi)頭,后跟 4 位數(shù)字(例如:“0000002”、“SIP0003”、“SIG0004”、“JPA0005”或“DEM0006”之一)?,F(xiàn)在讓我感到困惑的是當(dāng)用戶(hù)輸入時(shí),在按名稱(chēng)搜索字段中輸入一個(gè)九位數(shù)字。按名稱(chēng)搜索應(yīng)使用/api/risk/000000019. 這應(yīng)該由上面的find by name action來(lái)處理。但是,由于某種原因,上述get by ID 操作的約束正則表達(dá)式與九位數(shù)字匹配,這當(dāng)然找不到條目。并且用戶(hù)看到一個(gè)錯(cuò)誤。但是,如果用戶(hù)在“按名稱(chēng)搜索”字段中輸入一個(gè)四位數(shù)字,則調(diào)用會(huì)/api/risk/0004與上述按名稱(chēng)搜索操作相匹配并按其應(yīng)有的方式工作。對(duì)通過(guò) ID 操作正則表達(dá)式獲取\d{7}的約束部分不應(yīng)該完全匹配 7 位數(shù)字并且不再匹配嗎?當(dāng)然不匹配正則表達(dá)式的后半部分:!/api/risk/000000019(SI[PG]|JPA|DEM)\d{4}有什么建議嗎?
1 回答
白豬掌柜的
TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
這里的正則表達(dá)式:
// GET api/risk/0000001
[HttpGet( "{riskId:regex(^\\d{{7}}|(SI[[PG]]|JPA|DEM)\\d{{4}})}", Order = 0 )]僅檢查它是否“以”表達(dá)式開(kāi)頭,考慮添加對(duì)字符串結(jié)尾的檢查??紤]以下簡(jiǎn)化正則表達(dá)式之間的區(qū)別:
^\d{7}^\d{7}$
注意1將匹配0000001,0000001234和0000001ABC。
雖然您可能在2which 之后匹配0000001。
- 1 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
