Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
1
.NET 4.x

[Web Api] Как настраивается роутинг?

14.03.2018, 12:24. Показов 1138. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос в том "в какой последовательности сопоставляются роуты и экшины"?
(ветвет хотелось бы слышать в 2х вариантах: как решить мой случай и в стиле ответа на вопрос "как какой последовательности, из каких папок, выбираются вью)

У меня почему-то не работает (работает, но я не понимаю как) роутинг, на Web Api.

вот так он настроен
C#
1
2
3
4
5
6
7
            config.MapHttpAttributeRoutes();
 
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
При обращении по дефолтному варианту api/controller/[verb] - всё окей.
Но если я хочу произвольный роутинг... интерес вопроса в том что если я использую пару атрибутов RoutePrefix и Route то всё будет ОК, но если только второй то в таком случае не сработает!

Конкретнее. Есть контролер User и экшин Logout

При запросе api/user - всё ок
При запросе api/user/logout - не ок. (ну тут то всё понятно)
При запросе api/user/logout и атрибуте Route("logout") - не работает (хотя здесь я ожидал "успеха")
При запросе api/user/logout и атрибуте RoutePrefix("api/user"), и Route("logout") - всё успешно.

Вопрос - почему не сработал 3й пример? (ну и как настроить так что бы RoutePrefix всегда не писать)

Добавлено через 11 часов 20 минут
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2018, 12:24
Ответы с готовыми решениями:

Роутинг web api - ошибка при сопоставлении маршрутов
Добрый день Продолжаю эпопею с роутингом Методы котроллера: public Object Get(int...

C#, WEB API 2, OWIN. Как осуществить кросдоменную авторизацию?
Добрый день. У меня такая ситуация - есть 2 приложения asp .net web api 2 1. Первое приложение,...

Web api Управлять очередью запросов динамически (длиной) и как получить url поступившего в очередь запроса
Я так понимаю, что все запросы приходят в HTTP.Sys откуда запрос в виде HTTP.Context поступает на...

Производительность Web API
Приветствую. Решил разобраться с Web api. Создал проект. Опубликовал. Все работает, но есть...

7
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
14.03.2018, 13:07 2
DarkOrk, 2й пример не сработал потому что путь не правильный и программа не знает куда обращаться. RoutePrefix пишется на контроллер 1 штука, не думаю что у вас их миллионы и это так затруднительно, в любом случае это улучшает читаемость пути.
0
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
14.03.2018, 18:18  [ТС] 3
kingzfate, 0.0 cc....пасибо....
Цитата Сообщение от kingzfate Посмотреть сообщение
2й пример не сработал потому что путь не правильный и программа не знает куда обращаться.
Цитата Сообщение от DarkOrk Посмотреть сообщение
При запросе api/user/logout - не ок. (ну тут то всё понятно)
Добавлено через 49 секунд
Цитата Сообщение от DarkOrk Посмотреть сообщение
почему не сработал 3й пример?
А как этот вариант прокомментируете?
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
15.03.2018, 07:15 4
DarkOrk, перепутал, это и был комментарий к 3 примеру
0
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
15.03.2018, 16:03  [ТС] 5
Ну ок... а если так...

C#
1
2
3
[HttpPatch]
[Route("~/api/devices/{diviceId}/investigations/{id}/onlyactivestatus")]
public async Task<IHttpActionResult> ModifyInvestigation_onlyActiveStatus(int deviceId, int id)
запрос
PATCH http://localhost:5533/api/devi... tivestatus

и в итоге...
{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost:5533/api/devices/11/investigations/22/onlyactivestatus'.",
"MessageDetail": "No action was found on the controller 'DeviceInvestigations' that matches the request."
}

Есть соображения?

Добавлено через 5 часов 13 минут
0
Unnamed
160 / 158 / 81
Регистрация: 09.06.2011
Сообщений: 852
16.03.2018, 09:45 6
DarkOrk, ну похоже не может найти DeviceInvestigations в контроллере, вы роут на него дали?
0
.NET senior
440 / 358 / 137
Регистрация: 23.09.2016
Сообщений: 980
17.03.2018, 15:01 7
DarkOrk, обратите внимание, что в атрибуте Route у Вас указано
Цитата Сообщение от DarkOrk Посмотреть сообщение
~/api/devices/{diviceId}/investigations/{id}/onlyactivestatus
, а имя параметра метода - deviceId.
Насколько мне известно, для корректного сопоставления роута и метода параметры метода и соответствующие им шаблоны подстановки в роуте должны иметь одинаковые имена.
1
20 / 19 / 9
Регистрация: 06.02.2015
Сообщений: 382
19.03.2018, 21:19  [ТС] 8
bax_tang, да, да... спасибо! Я уже тоже, давно нашёл - это моя ошибка.

В общем, в доках не нашёл, но как практика показала - роут мап с роут атрибутами не считается. И по этому или одними, или другими играться (к сожалению).

Просто, в процессе ковыряния наковырял, в качества бонуса всем интересующимся. Если влепить атрибут Route на экшен (даже без скобок) то эта штука будет говорить что этот экшен типа САМОГО дефолтного, на уровне /Home/Index. Минут 15 не мог понять что это за баг такой... а вот так оказалось.
0
19.03.2018, 21:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2018, 21:19
Помогаю со студенческими работами здесь

Клиент Web Api
Авторизуюсь к web api - следующий запрос выдает не авторизованный доступ, авторизация на сервере...

Web API Сервер
Есть сервер. Я знаю его IP адрес, логин и пароль. Как подключиться к серверу используя web api,...

Асинхронность в Web API
У меня есть проект, который представляет собой REST API для управлением локальным хранилищем (по...

Авторизация в Web API
Всем привет. Я использую ASp.NET WEB API и делаю авторизацию к нему. По сути мне нужно только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru