MVC 2 Routes проблема (ошибка?) - PullRequest
0 голосов
/ 21 июля 2010

Итак, я столкнулся со странной проблемой с маршрутом в моем приложении.По некоторым причинам это просто не будет соответствовать.Он выглядит как {controller}/Comments/Put и имеет соответствующие ограничения, чтобы убедиться, что он попадает в правильный контроллер, в данном случае «Разное».Когда я отправляю сообщение на маршрут, оно просто не совпадает ...

Я подключил библиотеку RouteDebugger и там написано "Нет соответствия!", НО, когда я смотрю на таблицу маршрутов, котораяВ столбце «Совпадение» есть зеленый «True», так что я в небольшом проигрыше.Как это может совпадать и не совпадать в одно и то же время?

Я зашел так далеко, что закомментировал ВСЕ другие маршруты для приложения, и я все еще получаю тот же результат.

Один разэто сработало, когда я изменил маршрут на что-то тупо длинное, но потом я получил еще одну ошибку, которая говорит, что я не могу опубликовать действие, потому что он был украшен [HttpPut], НО, у меня был HttpMethodOverride как частьо посте ... В любом случае, это еще одна глупая ошибка, которая даже не должна происходить, но, опять же, это может быть сказано для всех ошибок.

ИДК, если это что-то меняет, не должно..., но действие, которое необходимо вызвать, является действием RedirectToRouteResult.

РЕДАКТИРОВАТЬ: Я также попытался поместить маршрут в самый верх списка, чтобы он вызывался первым, все еще без изменений ...

Во всяком случае, если кто-то может указать мне, почему маршрут терпит неудачу, я был бы очень признателен!

Заранее спасибо!

РЕДАКТИРОВАТЬ 2: Чтобы уточнить всеЧуть больше, приложение предназначено для публикации коротких сообщений и последующего комментирования этих сообщений.

Отправка сообщения работает нормально через контроллер Ajax с маршрутом Ajax/Post/Put, который соответствует {controller}/Post/Put.Как вы можете заметить, маршруты очень похожи, но они не конфликтуют друг с другом.Каждый маршрут имеет ограничение контроллера в виде controller = new ControllerConstraint("Ajax") или controller = new ControllerConstraint("Misc").

РЕДАКТИРОВАТЬ 3: Чтобы пояснить еще раз, вот контроллер / действие, которое должно быть вызванои маршрут в Global.asax:

MiscController : BaseController {
    [HttpPut, ValidateAntiForgeryToken]
    public RedirectToRouteResult PutComment(
        [Bind(Prefix = "Comment", Include = "Text")] Comment Comment) {
        // Do stuff...
    }
}

Routes.MapRoute("Misc (Put Comment)", "{controller}/Comments/Put", new {
    action = "PutComment"
}, new {
    controller = new ControllerConstraint("Misc")
});

РЕДАКТИРОВАТЬ 4: Точная запись маршрута следующим образом не имеет никакого эффекта:

Routes.MapRoute("Misc (Put Comment)", "Misc/Comments/Put", new {
    controller = "Misc",
    action = "PutComment"
});

РЕДАКТИРОВАТЬ5: Я прошел и упростил все маршруты, больше нет параметров в URL и больше нет ограничений.Итак, маршруты выглядят так:

Routes.MapRoute("Misc (Comments)", "Misc/Comments", new {
    controller = "Misc",
    action = "Comments"
});

Итак, теперь, когда маршрут полностью жестко запрограммирован, не должно быть никаких расхождений по поводу отсутствия подходящих маршрутов.Просто и просто ... или это ...

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

Итак, двигаясь дальше, я решил повторить ту же самую попытку поста, но на этот раз включивОтладчик маршрута дал мне следующее: Маршрут все еще не совпадает, YET в таблице маршрутов, он отображается как зеленый как соответствующий.ПРОТИВОРЕЧИЯ до a ** !!!

Итак, проглотив еще одну ошибку BS, я решил отключить все остальные маршруты, а также все другие методы от всех других контроллеров.

Угадайте, что,Я все еще получил те же результаты!Это как если бы фреймворк полностью менял SUPER MEGA HERP-A-DE-DERP на мне ...

Я очень расстроен.Я написал приложения с гораздо большей сложностью, чем это простое приложение для постов / комментариев, и я никогда не сталкивался с такими сложностями ...

Я просто не знаю больше ...

:: идет в угол, сворачивается и начинает плакать ::

1 Ответ

0 голосов
/ 29 июля 2010

Хорошо, так что я понял это, я думаю, но в любом случае это работает сейчас.

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

Моя вторая ошибка, которую яне перенаправлял должным образом, или, в частности, я не указывал контроллер для перенаправления.В свою очередь, редирект пытался перенаправить к действию, которое не существовало в том же контроллере.

Я сделал, однако, и это немного противоречиво, пару раз получаю исключение HttpVerb.Я могу только предположить, что я вызывал исходное действие и затем перенаправлял к существующему действию, но перенаправление сохраняло HttpVerb, таким образом вызывая исключение для второго действия.Это, однако, все еще выглядит как пояснение BS, которое, вероятно, неверно, но это лучший способ, которым я могу понять это.

Наконец, я заметил, что если маршрут настроен для контроллера A, но действие на самом делев контроллере B вы получите исключение, которое выглядит так, как будто оно обрабатывает «действие», но не удалось.Другими словами, это может ввести вас в заблуждение, если вы подумаете, что совершаете какое-то действие, когда на самом деле это не так.

В любом случае, надеюсь, это поможет кому-то в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...