Я работаю над проектом веб-ави.Устранение неполадок при запуске метода веб-api
У меня есть два метода получения действий в контроллере.
Здесь контроллер:
namespace Playground.Web.Controllers.API
{
[RoutePrefix("api/DamageEvent/{actionType}")]
public class DamageEventController : ApiController
{
#region API methods
[HttpGet]
public async Task<IHttpActionResult> GetDamageEvent(int damageEventId = 0)
{
//some logic
}
[HttpGet]
[Route("{ddd:int}")]
public async Task<IHttpActionResult> GetDamageEvent2(int ddd = 0)
{
//some logic
}
#endregion
}
}
Здесь WebApiConfig Defenition:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SerializerSettings.DateFormatString = "dd/MM/yyyy";
}
}
Вот пример URL в скрипача композе для запуска веб-апи действия:
http://localhost/playground/api/DamageEvent/GetDamageEvent2/?ddd=22
я ожидаю, что для URL-адреса выше GetDamageEvent2 Действие api будет запущено. Но вместо этого срабатывает метод GetDamageEvent
.
Почему GetDamageEvent2 не уволен? Любая идея, что мне не хватает?
=================== Обновление ================= ===================
После того как я красный ответ от Нкоси
Я сделал некоторые изменения в свой код, я добавил в класс WebApiConfig новый маршрут :
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
А вот изменения типа действия:
namespace Playground.Web.Controllers.API
{
[RoutePrefix("api/DamageEvent")]
public class DamageEventController : ApiController
{
#region API methods
[HttpGet]
[Route("GetDamageEvent/{damageEventId}")]
public async Task<IHttpActionResult> GetDamageEvent(int damageEventId = 0)
{
//some logic
}
[HttpGet]
[Route("GetDamageEvent2/{ddd}")]
public async Task<IHttpActionResult> GetDamageEvent2(int ddd = 0)
{
//some logic
}
#endregion
}
}
После того, как я внес изменения, я попытался уволить оба действия, и это сработало.
Но проблема теперь, когда я пытаюсь вызвать другие действия в других контроллерах, например:
http://localhost/playground/api/Contracts/1
Я получаю сообщение об ошибке 404.
Так что, я думаю, ошибка возникает из-за нового шаблона маршрута.
Итак, мой вопрос: как я могу исправить ошибку выше и принять новый шаблон маршрута во внимание только тогда, когда URI попытается получить доступ к DamageEventController?
Вам нужно будет показать контроллер, который не работает, мы сделаем предположения относительно того, почему он не работает. – Nkosi
Хорошо, я перечитываю новую проблему, и это может быть проблема с вашими маршрутами. Framework использует первый согласованный маршрут. Попробуйте переключить порядок двух маршрутов, основанных на соглашениях. – Nkosi
@Nkosi, я переключил шаблоны заказов на маршрут. Когда я пытаюсь получить доступ к контроллеру DamageEvent, я получаю ошибку 405. – Michael