Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# под Web, ASP.NET

Войти
Регистрация
Восстановить пароль
 
DarkOrk
16 / 16 / 6
Регистрация: 06.02.2015
Сообщений: 353
#1

[Web Api] Как настраивается роутинг? - C# ASP.NET/.NET 4.x

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

Вопрос в том "в какой последовательности сопоставляются роуты и экшины"?
(ветвет хотелось бы слышать в 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2018, 12:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос .NET 4.x [Web Api] Как настраивается роутинг? (C# ASP.NET):

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

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

Производительность Web API - C# ASP.NET
Приветствую. Решил разобраться с Web api. Создал проект. Опубликовал. Все работает, но есть ньюанс: Первое подключение "долгое", т.е....

Авторизация на web api - C# ASP.NET
Здравствуйте. Пытаюсь сделать авторизацию на web api с куки и вообще не понимаю, как. Про куки нашёл мало информации и только про то, как...

.NET 4.x Асинхронность в Web API - C# ASP.NET
У меня есть проект, который представляет собой REST API для управлением локальным хранилищем (по сути просто IEnumerable объект) Это...

Web api, out of memory - C# ASP.NET
Добрый день. Имеется вот такой код public class FileHelper { public static string GetHash(FileInfo file) { ...

7
kingzfate
Unnamed
137 / 140 / 51
Регистрация: 09.06.2011
Сообщений: 670
Завершенные тесты: 1
14.03.2018, 13:07 #2
DarkOrk, 2й пример не сработал потому что путь не правильный и программа не знает куда обращаться. RoutePrefix пишется на контроллер 1 штука, не думаю что у вас их миллионы и это так затруднительно, в любом случае это улучшает читаемость пути.
0
DarkOrk
16 / 16 / 6
Регистрация: 06.02.2015
Сообщений: 353
14.03.2018, 18:18  [ТС] #3
kingzfate, 0.0 cc....пасибо....
Цитата Сообщение от kingzfate Посмотреть сообщение
2й пример не сработал потому что путь не правильный и программа не знает куда обращаться.
Цитата Сообщение от DarkOrk Посмотреть сообщение
При запросе api/user/logout - не ок. (ну тут то всё понятно)
Добавлено через 49 секунд
Цитата Сообщение от DarkOrk Посмотреть сообщение
почему не сработал 3й пример?
А как этот вариант прокомментируете?
0
kingzfate
Unnamed
137 / 140 / 51
Регистрация: 09.06.2011
Сообщений: 670
Завершенные тесты: 1
15.03.2018, 07:15 #4
DarkOrk, перепутал, это и был комментарий к 3 примеру
0
DarkOrk
16 / 16 / 6
Регистрация: 06.02.2015
Сообщений: 353
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/devices/11...lyactivestatus

и в итоге...
{
"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
kingzfate
Unnamed
137 / 140 / 51
Регистрация: 09.06.2011
Сообщений: 670
Завершенные тесты: 1
16.03.2018, 09:45 #6
DarkOrk, ну похоже не может найти DeviceInvestigations в контроллере, вы роут на него дали?
0
bax_tang
.NET senior
406 / 327 / 91
Регистрация: 23.09.2016
Сообщений: 945
Завершенные тесты: 3
17.03.2018, 15:01 #7
DarkOrk, обратите внимание, что в атрибуте Route у Вас указано
Цитата Сообщение от DarkOrk Посмотреть сообщение
~/api/devices/{diviceId}/investigations/{id}/onlyactivestatus
, а имя параметра метода - deviceId.
Насколько мне известно, для корректного сопоставления роута и метода параметры метода и соответствующие им шаблоны подстановки в роуте должны иметь одинаковые имена.
1
DarkOrk
16 / 16 / 6
Регистрация: 06.02.2015
Сообщений: 353
19.03.2018, 21:19  [ТС] #8
bax_tang, да, да... спасибо! Я уже тоже, давно нашёл - это моя ошибка.

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

Просто, в процессе ковыряния наковырял, в качества бонуса всем интересующимся. Если влепить атрибут Route на экшен (даже без скобок) то эта штука будет говорить что этот экшен типа САМОГО дефолтного, на уровне /Home/Index. Минут 15 не мог понять что это за баг такой... а вот так оказалось.
0
19.03.2018, 21:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2018, 21:19
Привет! Вот еще темы с ответами:

Авторизация в Web API - C# ASP.NET
Всем привет. Я использую ASp.NET WEB API и делаю авторизацию к нему. По сути мне нужно только логин/пароль и некоторые поля. Ни ролей...

Web API Сервер - C# ASP.NET
Есть сервер. Я знаю его IP адрес, логин и пароль. Как подключиться к серверу используя web api, visual studio и C#? Весь интернет...

Web API, нетипичные операции - C# ASP.NET
Вероятно, мне после WCF/десктоп стереотипы мешают, но никак не могу понять, как вписывать некоторые вещи в Web API. Типовой пример -...

Условие поиска в Web Api - C# ASP.NET
Пишу RESTful Api, столкнулся со следующим вопросом - как можно поменять условие поиска. К примеру - в коде используется условие поиска по...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru