Итак, я столкнулся со странной проблемой с маршрутом в моем приложении.По некоторым причинам это просто не будет соответствовать.Он выглядит как {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 на мне ...
Я очень расстроен.Я написал приложения с гораздо большей сложностью, чем это простое приложение для постов / комментариев, и я никогда не сталкивался с такими сложностями ...
Я просто не знаю больше ...
:: идет в угол, сворачивается и начинает плакать ::