2015-10-27 39 views
9

根據http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx#optionals-and-defaults屬性路由 - 可選參數不起作用?

在使用屬性路由時,您可以通過添加問號(?)來具有可選參數。但它不適用於我(ASP.NET Web API 5)。

[Route("staff/{featureID?}")] 
    public List<string> GetStaff(int? featureID) { 
     List<string> staff = null;   
     return staff; 
    } 

如果我使用staff/1等它工作正常,如果我使用/staff我得到通常:

「沒有HTTP資源發現,請求URI ......相匹配」

「控制器上找不到與 匹配的請求。」

我是否缺少參考或其他?或者做錯了?

回答

1

如果我做的:的

[Route("staff/{featureID=null}")]

代替

[Route("staff/{featureID?}")]

它的工作原理。

技術上這並不回答我的問題,但它讓我工作!

8

我也遇到了同樣的問題,並解決它有點不同。但是,它仍然不適用於我在該博客文章中列出的內容。我將其添加到函數定義中,而不是在路徑定義中添加默認參數值。

我不得不這樣做,以我的例子能正常工作,因爲我使用的是string代替int和增加在null路由定義默認引起我的函數的參數有字符串值"null"

[Route("staff/{featureID?}")] 
public List<string> GetStaff(int? featureID = null) { 
    List<string> staff = null;   
    return staff; 
} 
+0

望着那,這是絕對意義上正常的方法一個可選的參數會被這樣做的方式,對「空」的部分很好的啓示,以及 –

4

這是因爲您始終必須爲可選參數設置默認值,即使默認值爲null。這就是爲什麼這個工程:

[Route("staff/{featureID=null}")] 
+6

那麼,爲什麼有' ?字符功能呢? – Sal