Как проверить, существует ли маршрут (ASP.NET MVC) для заданного пути?

У меня есть список локальных URL-адресов, и мне нужно определить, являются ли они "допустимыми путями MVC". Как проверить, соответствует ли URL (путь) контроллеру MVC?

Фил Haack Route Debugger найдет маршрут, соответствующий текущему запросу, и делает это с использованием текущего HttpContext. Я хотел бы получить эту информацию, не создавая макет HttpContext - если это возможно.

Ответы

Ответ 1

Вы можете вызвать RouteTable.Routes.GetRouteData с издетой HttpContextBase.

Маршруты сопоставляются внутри, используя запрос AppRelativeCurrentExecutionFilePath.
Однако эта функция не отображается, поэтому вам нужно передать HttpContextBase.

Вам нужно создать класс HttpContextBase, который возвращает экземпляр HttpRequestBase в свойстве запроса.
Класс HttpRequestBase должен вернуть ваш путь, начиная с ~/, в свойстве AppRelativeCurrentExecutionFilePath.

Вам не нужно реализовывать какие-либо другие свойства, если они не используются IRouteConstraint s.

Чтобы проверить, есть ли у вас маршрут MVC, проверьте, будет ли результирующий routeData.Handler is MvcRouteHandler.