Я начинаю с переполнения стека и в ASP.NET в целом, но я попытаюсь сделать здесь свою точку зрения.Web API Определение маршрутов для контроллеров asp.net
Я разрабатываю веб-API в VB.NET, но я застреваю, когда пытаюсь определить маршруты.
У меня есть, например, такие функции:
Public Function GetAllInformations() As IEnumerable(Of cl_information)
'return all informations
End Function
Public Function GetInformations(p_id As Int16) As IHttpActionResult
'return a specific informations
End Function
Public Function PutInformation(p_information As cl_information) As IHttpActionResult
'return the http statuscode depending on the update of the information
End Function
Public Function PostInformation(p_information As cl_information) As IHttpActionResult
'return the http statuscode depending on the post of the information
End Function
Когда я пытаюсь этот контроллер, с помощью почтальона, я firsty проверить метод GET для URI:/API/информацию. Метод GetAllInformations() корректно запускается. Но когда я пытаюсь использовать метод GET для определенного информационного элемента, в этом виде URI:/api/informations/i также запускается GetAllInformations().
Я получил эту информацию из журнала событий в визуальной студии:
"data": {
"baseType": "RequestData",
"baseData": {
"ver": 2,
"id": "12785441767974844366",
"name": "GET informations [id]",
"startTime": "2016-05-12T08:56:49.4044704+02:00",
"duration": "00:00:04.1740006",
"success": true,
"responseCode": "200",
"url": "http://localhost:51651/api/informations/i",
"httpMethod": "GET",
"properties": {
"DeveloperMode": "true"
}
}
Я не знаю, почему запрос не правильно маршрутизаций моего GetInformations (P_ID Как Int16) функция. Не могли бы вы мне помочь?
FYI: У меня есть эта базовая конфигурация маршрутов:
Public Module WebApiConfig
Public Sub Register(ByVal config As HttpConfiguration)
' Configuration et services API Web
' Itinéraires de l'API Web
config.MapHttpAttributeRoutes()
config.Routes.MapHttpRoute(
name:="DefaultApi",
routeTemplate:="api/{controller}/{id}",
defaults:=New With {.id = RouteParameter.Optional}
)
End Sub
End Module
РЕДАКТИРОВАТЬ:
Я попытался реализовать способ для обработки обоих случаев, с дополнительным аргументом, но этот параметр не обнаружен, событие, если я проверить URI:/API/информация/я
Public Function GetInformations(Optional p_id As Int16 = 0) As IHttpActionResult
If p_id = 0 Then
'return all informations
End If
'return a specific information
End Function
Да, это все. отметьте свое сообщение как ответ –
Вы также можете изменить маршрут, чтобы быть/{p_id} вместо {id}. – Spivonious