Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Помогите составить маршрут / 25 сообщений из 31, страница 1 из 2
16.11.2015, 05:22
    #39104057
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
Здравствуйте!

Есть контроллер Documents и в нем 3 действия Action() Action(int id) Action(string x)
Как заставить MVC вызывать нужные действия на контроллере? Как уже не пробовал - все одно: неоднозначность...
...
Рейтинг: 0 / 0
16.11.2015, 13:30
    #39104412
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
ughunter,
Переименовать в: Action1() Action2(int id) Action3(string x) или дать более осмысленные названия экшен методам.
...
Рейтинг: 0 / 0
16.11.2015, 16:51
    #39104704
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
ughunterЗдравствуйте!

Есть контроллер Documents и в нем 3 действия Action() Action(int id) Action(string x)
Как заставить MVC вызывать нужные действия на контроллере? Как уже не пробовал - все одно: неоднозначность...Реализовать своего наследника ActionMethodSelectorAttribute и использовать.
...
Рейтинг: 0 / 0
16.11.2015, 17:33
    #39104786
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
Axeleron,

Метод не применим - страницы проиндексированы.

В реалии конечно выглядит так: /Documents/Articles...
- при вызове /Documents/Articles - метод Articles()
- при /Documents/Articles/50 - метод Articles(int id)
- при /Documents/Articles/xxx - метод Articles(string tag)
...
Рейтинг: 0 / 0
16.11.2015, 17:38
    #39104796
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANA,

Немножко более подробно пожалуйста. Если можно пример того, как использовать. Спасибо.
...
Рейтинг: 0 / 0
16.11.2015, 17:40
    #39104806
monstrU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
ughunter,

если делать по уму, то делат свою реализацию ActionMethodSelectorAttribute.
но можно попробовать использовать дефолтный биндер - у метода контроллера поставь значения по умолчанию int?, string - и посмотри как биндер будет обрабатывать твои адреса articles/1 и articles/tag.
может сработать - проверь
...
Рейтинг: 0 / 0
16.11.2015, 17:56
    #39104827
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
ughunterskyANA,

Немножко более подробно пожалуйста. Если можно пример того, как использовать. Спасибо.Подробности легко гуглятся.

А пример... Какой-то такой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[SelectActionByParameter(Name = "id")]
public ActionResult Articles(int id)
{
    /* ... */
}

[SelectActionByParameter(Name = "tag")]
public ActionResult Articles(string tag)
{
    /* ... */
}


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class SelectActionByParameterAttribute : ActionMethodSelectorAttribute
{
    public string Name { get; set; }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.Request[this.Name] != null;
    }
}
...
Рейтинг: 0 / 0
16.11.2015, 18:50
    #39104903
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAughunterskyANA,

Немножко более подробно пожалуйста. Если можно пример того, как использовать. Спасибо.Подробности легко гуглятся.

А пример... Какой-то такой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[SelectActionByParameter(Name = "id")]
public ActionResult Articles(int id)
{
    /* ... */
}

[SelectActionByParameter(Name = "tag")]
public ActionResult Articles(string tag)
{
    /* ... */
}



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class SelectActionByParameterAttribute : ActionMethodSelectorAttribute
{
    public string Name { get; set; }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.Request[this.Name] != null;
    }
}



Из гаубицы по воробьям. Плохой пример.



ughunter,

Не слушай этих дядек, плохого насоветуют.

Вот то что надо: http://habrahabr.ru/post/78079/

Ещё

http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-a-route-constraint-cs
...
Рейтинг: 0 / 0
16.11.2015, 19:32
    #39104938
ughunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
вот все чего удалось достичь:

Текущий запрос для действия "Articles" на контроллере типа "DocumentsController" является неоднозначным на следующих методах действий:
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Articles() на типе FishNSK.WebUI.Controllers.MvcApp.DocumentsController
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Articles(Int32) на типе FishNSK.WebUI.Controllers.MvcApp.DocumentsController
System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Articles(System.String) на типе FishNSK.WebUI.Controllers.MvcApp.DocumentsController

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
routes.MapRoute(
                "Articles",
                "Documents/Articles/{id}",
                new { controller = "Documents", action = "Articles" },
                new { id = @"\d+" }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );



что и где я делаю не так?
...
Рейтинг: 0 / 0
16.11.2015, 21:16
    #39104994
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
ughunterчто и где я делаю не так?hVostt-а слушаешь :)
...
Рейтинг: 0 / 0
17.11.2015, 08:12
    #39105143
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAughunterчто и где я делаю не так?hVostt-а слушаешь :)

Ню-ню

ээх... молодёж...

вариант №1

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class DocumentsController : Controller
{

   public ActionResult Articles()
   {
       // ...
   }

   public ActionResult ArticlesByNumber(int id)
   {
       // ...
   }

   public ActionResult ArticlesByString(string id)
   {
       // ...
   }
}



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
           routes.MapRoute(
                "Articles1",
                "Documents/Articles",
                new { controller = "Documents", action = "Articles" }
            );

           routes.MapRoute(
                "Articles2",
                "Documents/Articles/{id}",
                new { controller = "Documents", action = "ArticlesByNumber" },
                new { id = @"\d{1,9}" }
            );

           routes.MapRoute(
                "Articles3",
                "Documents/Articles/{id}",
                new { controller = "Documents", action = "ArticlesByString" },
            );




вариант №2

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public class DocumentsController : Controller
{
   
   [Route("Documents/Articles")]
   public ActionResult Articles()
   {
       // ...
   }

   [Route("Documents/Articles/{id:int}")]
   public ActionResult ArticlesByNumber(int id)
   {
       // ...
   }

   [Route("Documents/Articles/{id:alpha}")]
   public ActionResult ArticlesByString(string id)
   {
       // ...
   }
}




надо понимать, что маршруты это одно, а названия действий это другое.

когда называешь действия одинаково Articles, Articles, Articles... интересно, как фреймворк должен понять, чего хотел автор? с помощью встроенной гадалки?

просто голову надо включать и решать задачи теми инструментами, которые именно для этого предназначены, а не так, как советует skyANA -- прикатывать бульдозер с экскаватором, чтобы высадить молодое деревце.
...
Рейтинг: 0 / 0
17.11.2015, 08:28
    #39105148
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVostt, вот ты клоун. Изначально поставленную задачу не решил, зато посмешил :) Так держать!
...
Рейтинг: 0 / 0
17.11.2015, 08:37
    #39105154
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAhVostt, вот ты клоун. Изначально поставленную задачу не решил, зато посмешил :) Так держать!

долго держался? бомбануло так бомбануло
...
Рейтинг: 0 / 0
17.11.2015, 08:53
    #39105159
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVostt, я спокоен. Просто рассуждаю...

Ты прям выпячиваешь свой сарказм наружу.
Обычно так себя ведут клоуны, либо тролли, либо не уверенные в себе люди (уверенные просто говорят, что вот это решение будет лучше потому-то и потому-то).
...
Рейтинг: 0 / 0
17.11.2015, 08:54
    #39105161
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
Так чего-ты хочешь: повеселить нас, или пофлудить/потроллить, или таки что-то доказать/показать?
...
Рейтинг: 0 / 0
17.11.2015, 09:53
    #39105226
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAhVostt, я спокоен. Просто рассуждаю...

Ты прям выпячиваешь свой сарказм наружу.
Обычно так себя ведут клоуны, либо тролли, либо не уверенные в себе люди (уверенные просто говорят, что вот это решение будет лучше потому-то и потому-то).

skyANAТак чего-ты хочешь: повеселить нас, или пофлудить/потроллить, или таки что-то доказать/показать?

Когда человек переходит к всяческим искромётным и не очень оскорблениям, ща это называется ёмким словом «бомбит», так вот у тебя как раз сейчас бомбит.

Я дал правильное решение с самого начала, а ты дал неправильное. Можешь выдохнуть и успокоиться
...
Рейтинг: 0 / 0
17.11.2015, 10:07
    #39105244
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVostt, хорошо, давай обсудим решение...

Изначальная постановка задачи, что озвучена автором: есть контроллер с тремя одинаково названными методами, но разной сигнатурой. Как заставить MVC вызывать нужные действия на контроллере?

В этой постановке твоё решение не верное, моё - да :)

Согласен, что возможно автору подойдёт и твоё, а может и нет. Пусть выбирает.
...
Рейтинг: 0 / 0
17.11.2015, 10:21
    #39105262
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAИзначальная постановка задачи, что озвучена автором: есть контроллер с тремя одинаково названными методами, но разной сигнатурой. Как заставить MVC вызывать нужные действия на контроллере?

Это задача маршрутизации. Давай абстрагируемся от ASP.NET, вот у тебя 3 вида адресов:

/documents/articles
/documents/articles/id -- где id это число
/documents/articles/tag -- где tag это НЕ число

И каждый из этих видов мы обрабатываем совершенно по-разному. Как выяснить, какому обработчику отдать запрос? С помощью маршрутизации. И эта задача решаема средствами маршрутизации ASP.NET MVC, и ДОЛЖНА решаться именно ей. Это правильно. Есть сотня других способов решить эту задачу через задницу, через ещё какие-нибудь отверстия, но они -- неправильные.


skyANAВ этой постановке твоё решение не верное, моё - да :)

Как бы тебе не хотелось в это верить, но нет.

Если бы речь шла о выборе правильного действия по другим атрибутам запроса, например, по заголовкам, или по атрибутам авторизации, или в зависимости от дня и ночи, которые совершенно точно выходят за рамки маршрутизатора, то можно было бы с уверенностью говорить, что твоё решение верное. Но это, увы, не так.

skyANAСогласен, что возможно автору подойдёт и твоё, а может и нет. Пусть выбирает.

Я со своей стороны порекомендовал автору игнорировать ваши костыли, и вместо этого использовать правильный подход.

Пусть выбирает, согласен.
...
Рейтинг: 0 / 0
17.11.2015, 10:28
    #39105274
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVosttskyANAВ этой постановке твоё решение не верное, моё - да :)

Как бы тебе не хотелось в это верить, но нет.

В той постановке твоё решение не верное, моё - да.

Возможно автор действительно решает другую задачу, а возможно ты притягиваешь это за уши.
Это надо у автора уточнять. Ты не уточнил, следовательно выдаёшь желаемое за действительное.
...
Рейтинг: 0 / 0
17.11.2015, 12:44
    #39105445
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAВ той постановке твоё решение не верное, моё - да.

Возможно автор действительно решает другую задачу, а возможно ты притягиваешь это за уши.
Это надо у автора уточнять. Ты не уточнил, следовательно выдаёшь желаемое за действительное.

Ты характеризуешься патологической неспособностью признать свою неправоту?

Зачем мне что-то уточнять, если я вижу в чём проблема и знаю весьма конкретное и правильное решение, которое и привёл? Когда мне что-то не понятно, я уточняю. Здесь всё понятно.
...
Рейтинг: 0 / 0
17.11.2015, 13:03
    #39105468
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVostt,
перестань уже спорить. Все уже на форуме знают, что skyANA - самый умный и продвинутый программист. И как ты, возможно, уже замечал, он НИ разу пока не ошибся (не или не признал, что был неправ). А богом быть трудно (c) :)
...
Рейтинг: 0 / 0
17.11.2015, 13:09
    #39105474
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVostt, кстати, добро пожаловать! Тебя тоже как и меня skyANA записал в клоуны. Я очень рад тому, что его лексикон помимо 'слив засчитан' пополнился новым словом. Так понимаю, чел сходил в цирк и познал новые слова. :)
...
Рейтинг: 0 / 0
17.11.2015, 13:37
    #39105522
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVosttskyANAВ той постановке твоё решение не верное, моё - да.

Возможно автор действительно решает другую задачу, а возможно ты притягиваешь это за уши.
Это надо у автора уточнять. Ты не уточнил, следовательно выдаёшь желаемое за действительное.

Ты характеризуешься патологической неспособностью признать свою неправоту?А в чём я не прав?

В твоём понимании задачи надо использовать RouteAttribute, в этом я согласен.
А в той постановке, что указал ТС, следует использовать своего наследника ActionMethodSelectorAttribute.

Возможно автору подходит твоё решение, так пусть его и использует, я не против. А возможно это тестовое задание, или ещё чего.
...
Рейтинг: 0 / 0
17.11.2015, 13:56
    #39105557
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
skyANAА в той постановке, что указал ТС, следует использовать своего наследника ActionMethodSelectorAttribute.

авторЕсть контроллер Documents и в нем 3 действия Action() Action(int id) Action(string x)
Как заставить MVC вызывать нужные действия на контроллере? Как уже не пробовал - все одно: неоднозначность...

Может я чего-то не понимаю, но тогда объясни, как эту постановку можно понять таким образом, что надо привлекать селектор, а не маршрутизатор? Именно в такой постановке задача решается через маршрутизацию.

Для чего нужен селектор? Ты предлагаешь написать свою реализацию класса, и использовать кастомный атрибут, вместо того, чтобы воспользоваться штатными средствами, специально для этого предназначенными, без написании лишнего, ненужного кода.

Для чего? Ты всегда так делаешь?
...
Рейтинг: 0 / 0
17.11.2015, 14:07
    #39105576
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить маршрут
hVostt, skyANA, в общем не ругайтесь. Если ТСу нужны 3 экшн метода с одинаковым именем Action, но разной сигнатурой, то 100% верное решение от skyANA, если такого строгого условия нет, то решение более верное у hVostt'а.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Помогите составить маршрут / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]