Я создал простую функцию ApiController
whit 3.WebApi конфликтует с вызовами функций, игнорирует имена функций
- прибудет() // Получить весь
- ПОЛУЧИТЬ (INT идентификатор) // Получить по идентификатору
- GetFirst() // получить первые в списке
У меня есть 2 сценария и я буду очень признателен за правильное объяснение.
1: Если я реализую только
get()
иget(int id)
он работает идеально, когда я взываю кapi/controller/{id}
(ID опционально)2: Когда у меня есть 3 функции, когда я пытаюсь получить доступ к
api/controller/function/{id}
(id необязательно), он не работает. Работает только функция для получения по id. вы можете увидеть ошибку, которую я получаю ниже.Запрос недействителен. Словарь параметров содержит нулевую запись для параметра «id» типа, отличного от nullable, «System.Int32» для метода «Practica.Models.Person GetById (Int32)» в «Practica.Controllers.PersonController». Необязательный параметр должен быть ссылочным типом, нулевым типом или объявлен как необязательный параметр.
Api Класс:
класс PersonController общественности: ApiController { частное лицо [] listPerson;
public PersonController() {
listPerson = new Person[3];
listPerson[0] = new Person {
id = 1,
firstName = "test",
lastName = "test",
email = "[email protected]",
age = 26
};
listPerson[1] = new Person
{
id = 2,
firstName = "test",
lastName = "test",
email = "[email protected]",
age = 26
};
listPerson[2] = new Person
{
id = 3,
firstName = "test",
lastName = "test",
email = "[email protected]",
age = 26
};
}
public Person GetById(int id) {
try
{
var person = this.listPerson.Where(p => p.id == id).FirstOrDefault();
if (person != null)
{
return person;
}
else {
throw new InvalidOperationException();
}
}
catch (Exception) {
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
public Person[] Get()
{
try
{
if (this.listPerson != null)
{
return this.listPerson;
}
else
{
throw new InvalidOperationException();
}
}
catch (Exception)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
public Person GetFirst()
{
try
{
if (this.listPerson != null)
{
return this.listPerson.Where(x=>x.Equals(1)).FirstOrDefault();
}
else
{
throw new InvalidOperationException();
}
}
catch (Exception)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
}
WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Это как ApiController
распознают только ГЭТ и получить идентификатор, так что кто-то может объяснить мне, почему и как решить эту проблему?
Благодаря метод
вы можете использовать атрибут маршрут на каждой функции – MustangManiac
то, что вы имеете в виду именно? – gon250
http://stackoverflow.com/questions/9569270/custom-method-names-in-asp-net-web-api – Prashant