2015-10-27 18 views
9

Zgodnie z http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx#optionals-and-defaultsRouting atrybutów - parametr opcjonalny nie działa?

Możesz mieć opcjonalne parametry, dodając znak zapytania (?) Podczas korzystania z routingu atrybutów. Jednak to nie działa dla mnie (ASP.NET Web API 5).

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

Jeśli używam staff/1 etc to działa dobrze, jeśli mogę użyć /staff otrzymuję zwykle:

"Brak zasobów HTTP Stwierdzono, że pasuje do żądania URI ..."

"Nie znaleziono żadnej akcji na kontrolerze, która pasuje do tego żądania."

Czy brakuje mi referencji czy coś takiego? Lub robi to źle?

Odpowiedz

1

Jeśli zrobić:

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

zamiast

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

To działa.

Technicznie to nie odpowiada na moje pytanie, ale działa poprawnie!

8

Wpadłem też na ten sam problem i rozwiązałem go trochę inaczej. Jednak nadal nie działa dla mnie, jak określono w tym poście na blogu. Zamiast dodawać domyślną wartość parametru do definicji trasy dodałem ją do definicji funkcji.

Musiałem to zrobić dla mojego przykład działał poprawnie, ponieważ używałem string zamiast int i dodanie domyślną w definicji route null spowodował moje parametr funkcyjny mieć wartość ciągu "null".

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

Patrząc na to, że ma sens jako opcjonalny argument na normalnym sposobem byłoby zrobić w ten sposób, dobry wgląd na „null” części jak również –

4

Dzieje się tak dlatego, że zawsze należy ustawić wartość domyślną dla parametru opcjonalnego, nawet jeśli domyślną wartością jest null. Dlatego to działa:

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

Więc dlaczego mają " ? " funkcjonalność znaków w ogóle? – Sal

Powiązane problemy