2017-01-23 181 views
0

我在我的ASP.NET Web API配置下列路線2項目:從路由配置到屬性路由

 config.Routes.MapHttpRoute(
      name: "1MandatoryStringParameter", 
      routeTemplate: "api/{controller}/{data}", 
      defaults: null, 
      constraints: new { data = @".+?" } 

它用於下列的控制器方法(注意ArrayInput屬性):

[ArrayInput("data",Separator = ',')] 
public async Task<IHttpActionResult> Get(int[] data) 
{ 
... 
} 

我想用Attribute路由代替。

我試圖調用具有以下屬性替換到MapHttpRoute

[HttpGet] 
[Route("api/ActionsForItemTypesList/{data:regex(.+?)}", Name = "1MandatoryStringParameter")] 

出它不工作的開箱。我無法通過以下URL訪問我的方法:

api/ActionsForItemTypesList/1,2 

如果找不到404方法,

這與路由配置工作正常。

任何幫助表示讚賞。

編輯:修正了客戶端的URL。

編輯2:這是一個問題ApiExplorer(Swashbuckle槓桿ApiExplorer)

如果我修改路由屬性並取出ApiDescription變爲可用的參數(即{}數據)。

+0

兩件事。您可以爲int數組創建自定義路由約束和自定義模型綁定器。 [ASP.NET Web API 2中的屬性路由](https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2) – Nkosi

回答

0

確保已啓用屬性路由:

config.MapHttpAttributeRoutes(); 

而且在你Route屬性已指定了data參數必須是路徑的一部分,而不是一個查詢字符串。因此,請確保您正確地從客戶端調用動作:

api/ActionsForItemTypesList/1,2 

另請注意,您在路由屬性指定的前綴是api/ActionsForItemTypesList,而不是像api/Controller你試圖調用它。

+0

屬性路由已啓用,來自客戶端的呼叫按照您的說法完成。對於它的價值,我使用了Swashbuckle和Route Debugger。通過屬性路由,該方法從swagger doc中丟失。 –

+0

我剛剛創建了一個新的Web API項目,刪除了全局路由,啓用了屬性路由,使用此屬性修飾了控制器操作,並且沒有任何問題。嘗試在一個乾淨的項目中做,並逐步添加東西,直到找到造成問題的原因。 –

+0

修正了網址。現在我正在使用全局和屬性路由的混合。我的目標是隻使用屬性路由。 –