2016年12月14日 星期三

關於Attribute Routing,使用正則表示式排除特定字串

MVC架構下,使用Attribute Routing時,遇到要使用正則表示式排除有特定字串的Route。

當Model中使用  [RoutePrefix("{Type:regex(Apple|Pen)}")] 

表示當Route為ApplePen的時候,就會進入此Model
EX(http://localhost:XXXX/Apple或http://localhost:XXXX/Pen)

Type:regex(可以使用正則表示式來設定想要的字串內容)
  1. ^((?!特定字串).)*$
  2. ^(.(?<!特定字串))*$ 
      例如:^((?!Apple).)*$,只會取得不包含"Apple"的字串。

合起來使用就可以達到反效果,表示當Route中不含ApplePen的時候,就會進入此Model
EX:[RoutePrefix("{Type:regex( ^((?!Apple|).Pen)*$)}")]

--------------------------------------------------------------------------------------------------------------------------
這邊順帶做個筆記,範例:(http://localhost:XXXX/Sample/TestString123/456/789/123)

[RoutePrefix("Sample")]
[Route("TestString{Command}/{*pathInfo}")]

TestString為設定的特定字串,這樣就可以取得Command的值,此為123。
pathInfo可取得後續所有Route,此為456/789/123。