Действия в нижнем регистре с использованием атрибутивной маршрутизации в MVC5

#asp.net-mvc #asp.net-mvc-5 #attributerouting

#asp.net-mvc #asp.net-mvc-5 #маршрутизация атрибутов

Вопрос:

Я использую маршрутизацию атрибутов в приложении MVC5 и наслаждаюсь возможностью объявлять соглашения на уровне класса контроллера в соответствии с приведенным ниже примером. Существует ли рекомендуемый способ принудительного применения соглашений о пути / URL в нижнем регистре для действий внутри контроллера? В настоящее время я переопределяю GetAreaPrefix в обычае DefaultDirectRouteProvider для принудительного применения префиксов области нижнего регистра, но есть ли что-нибудь эквивалентное для обеспечения соблюдения соглашений о нижнем регистре для действий без необходимости размещать атрибут маршрута для каждого из них?

 namespace TestNamespace
{
    [RouteArea("TestArea", AreaPrefix = "testarea/testpath")]
    [Route("{action=index}")]
    public class TestController : Controller
    {
        /// <summary>
        /// this returns /testarea/testpath/Index (note the action is not lowercase)
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            return View();
        }

        /// <summary>
        /// this returns a properly lowercased path of /testarea/testpath/details
        /// Do we really need to put route attributes on each action? Is it possible to have a custom declaration at the class level?
        /// </summary>
        /// <returns></returns>
        [Route("details")]
        public ActionResult Details()
        {
            return View();
        }
    }
}
  

Ответ №1:

После дополнительных исследований установка для свойства route collection LowercaseUrls значения true в RegisterRoutes global.asax помогла мне:

 routes.LowercaseUrls = true;