Как создать конечные точки с разными методами http в asp.net (.net framework)

Я пытаюсь создать маршрут удаления пользователя, но не могу заставить его работать.
Все, что я нахожу в Интернете, предназначено для .NET CORE.
Я использую ASP.NET MVC. Итак, я запустил routes.MapMvcAttributeRoutes() в RouteConfig.cs.
Затем я создал контроллер, расширяющий System.Web.Mvc.Controller. (Все происходит из пространства имен System.Web.Mvc).

И у меня есть следующий метод:

[HttpDelete, Route("user/{id:long}")]
public async Task<ActionResult> Destroy(long id)
{
    IAccountService accountService = new AccountService();

    bool success = await accountService.Delete(id);

    return Json(new AuthenticateDto());
}

Перестановка атрибутов не работает (я новичок в атрибутах, так что не знаю, поможет ли это вообще)
Когда я пытаюсь перейти по URL-адресу, я получаю 404.

Кто-нибудь знает, почему это не работает?


person Noah Snoeks    schedule 29.05.2020    source источник
comment
Как вы это проверяете? Веб-браузеры поддерживают только get и post. Что произойдет, если вы замените [HttpDelete, Route("user/{id:long}")] на [HttPost, Route("user/{id:long}")] и вызовете /user/42?   -  person Christian Gollhardt    schedule 29.05.2020
comment
Я использовал postman для проверки и использовал следующий URL-адрес: localhost:44378/user/5   -  person Noah Snoeks    schedule 29.05.2020
comment
И вы выбрали удалить в Postman?   -  person Christian Gollhardt    schedule 29.05.2020
comment
да, и если я изменю его с помощью HttpPost, он отлично работает, если я выберу Post   -  person Noah Snoeks    schedule 29.05.2020
comment
У вас случайно нет https://stackoverflow.com/a/19735430/2441442?   -  person Christian Gollhardt    schedule 29.05.2020
comment
Также посмотрите здесь: stackoverflow.com/a/16241628/2441442   -  person Christian Gollhardt    schedule 29.05.2020
comment
Я не знаю ограничений, но я использую маршруты атрибутов, а не обычные маршруты ;-;.   -  person Noah Snoeks    schedule 29.05.2020
comment
Я посмотрел на stackoverflow.com/a/16241628/2441442 и, к сожалению, не исправил   -  person Noah Snoeks    schedule 29.05.2020
comment
ладно, тогда у меня нет идей... Проголосуйте ;)   -  person Christian Gollhardt    schedule 29.05.2020
comment
Я только что проверил с проектом ASp.Net MVC - и HttpDelete просто работает из коробки - я использую Autofac в качестве контейнера и регистрирую в нем контроллеры - но не понимаю, почему контейнер по умолчанию не должен работать. Работают ли ваши другие методы HTTP с точно такими же определениями маршрутов? Я вижу, что ваш маршрут начинается с User... - типичные определения маршрута следуют соглашению: {controller}/{action}/{id} -- дважды проверьте свой маршрут..   -  person Phantom2018    schedule 29.05.2020
comment
Говоря о маршрутах, вы зарегистрировали routes.MapMvcAttributeRoutes();, не так ли?   -  person Christian Gollhardt    schedule 29.05.2020
comment
вы можете попробовать добавить swagger и проверить, работает ли он из пользовательского интерфейса swagger ( Swashbuckle.Core )...   -  person Phantom2018    schedule 29.05.2020
comment
Да, я зарегистрировал «routes.MapMvcAttributeRoutes()», и маршруты верны, получение и отправка работают нормально, но удаление не работает.   -  person Noah Snoeks    schedule 29.05.2020
comment
Попробуйте явно добавить [FromUri].. вот так: public async Task‹ActionResult› Destroy([FromUri] long id)   -  person Phantom2018    schedule 29.05.2020
comment
Это работает путем явного добавления [System.Web.Http.FromUri]. Спасибо.   -  person Noah Snoeks    schedule 29.05.2020