Действие ASP.NET MVC дает 404 для определенных параметров?

Я получаю странную ошибку на своем сайте MVC. У меня есть действие в моем контроллере, которое отвечает на маршрут по умолчанию {controller}/{action}/{id} - в моем случае /Project/Client/{id}.

В зависимости от идентификатора, который я ему передаю, я получаю сообщение об ошибке. Если Elmah выключен, это прямая ошибка ASP.NET 404. Включение Elmah дает мне следующее:

System.Web.HttpException
   at System.Web.CachedPathData.GetConfigPathData(String configPath)
   at System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp)
   at System.Web.HttpContext.GetFilePathData()
   at System.Web.HttpContext.GetConfigurationPathData()
   at System.Web.Configuration.RuntimeConfig.GetConfig(HttpContext context)
   at System.Web.HttpContext.get_ImpersonationToken()
   at System.Web.ClientImpersonationContext.Start(HttpContext context, Boolean throwOnError)
   at System.Web.HttpApplication.ThreadContext.SetImpersonationContext()
   at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext)
   at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
   at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error)

Это происходит только с определенными параметрами ID. Например

/Projects/Client/ABC -- works
/Projects/Client/DEF -- works
/Projects/Client/GHI -- 404
/Projects/Client/JKL -- works

и так далее...

Любые подсказки?


person Chris    schedule 04.06.2009    source источник
comment
У вас есть какие-либо другие маршруты, настроенные в вашем приложении?   -  person Praveen Angyan    schedule 04.06.2009
comment
У меня есть тот, который также добавляет параметр страницы, поэтому {controller}/{action}/{id}/{page}   -  person Chris    schedule 04.06.2009
comment
У вас есть модульный тест для примера GHI? Было бы полезно убедиться, что у вас действительно есть проблема с маршрутизацией, а не проблема в логике контроллера.   -  person Jim Counts    schedule 30.06.2009


Ответы (3)


Вы можете использовать отладчик маршрутов Фила Хаака, чтобы узнать, какие маршруты вызываются. Прочитайте здесь: http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

person AndreasKnudsen    schedule 04.06.2009
comment
Это не выявило никаких проблем, но познакомило меня с отличным новым инструментом, который решил проблему в другом проекте, поэтому присудил ответ вам, в отсутствие каких-либо лучших решений. - person Chris; 30.07.2009

Одна вещь, на которую вы должны обратить внимание, это ваши файлы web.config на вашем сайте. Верхняя часть вашей трассировки стека;

at System.Web.CachedPathData.GetConfigPathData(String configPath)

Похоже, это вызов для определения местоположения файла web.config. Возможно, виртуальная файловая система, определяемая вашими маршрутами (/Project/client/id), конфликтует с файлом web.config, который может существовать, скажем, по адресу ~/Project/web.config.

Это немного дикий удар, полученный из трассировки стека, но не займет много времени, чтобы увидеть, может ли это быть проблемой.

person Steve Cooper    schedule 20.06.2009

На случай, если кто-то еще появится на этой странице и не найдет нужного решения, некоторые строки символов не разрешены в URL-адресах. Читайте об этом здесь:

Странная ошибка 404 в ASP.NET MVC при включении con< /а>

Решение — еще один флаг Microsoft «WorkProperly» (значение по умолчанию — «false»).

person Greg H    schedule 14.08.2013