Как вы устанавливаете маршрут по умолчанию в MVC6 при использовании атрибутов?

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

[Маршрут("{action=index}")]

Что эквивалентно этому в MVC6?

Обновить

Это код, который у меня был в MVC5

    [Route("{action=index}")]
    public class StaticPagesController : Controller
    {
        public ActionResult About()
        {
           return View();
        }

        public ActionResult Contact()
        {
           return View();
        }

        public ActionResult Index()
        {
           return View();
        }
    }

Я не смог понять, как сделать эквивалент в MVC6, но мне удалось получить ту же функциональность, используя следующее:

    [Route("[action]")]
    public class StaticPagesController : Controller
    {
        public ActionResult About()
        {
           return View();
        }

        public ActionResult Contact()
        {
           return View();
        }

        [Route("/[action]")]
        [Route("/")]
        public ActionResult Index()
        {
           return View();
        }
    }

person Cool Breeze    schedule 21.01.2016    source источник


Ответы (1)


Вы можете украсить свой конкретный метод действия, который вы хотите использовать по умолчанию, с атрибутом Route и передать ему [controller] в качестве шаблона маршрута. Таким образом, каждый раз, когда вы получаете запрос на yoursite/yourcontroller, входящий запрос будет перенаправлен на этот конкретный метод действия.

public class SettingsController : Controller
{      
    public IActionResult Index()
    {
        return View();
    }

    [Route("[controller]")]
    public IActionResult OtherIndex()
    {
        return Content("This will be the response for mySite/Settings request");
    }
}

Изменить: Согласно комментарию

Я не хочу включать имя контроллера в URL-адрес. Я хочу, чтобы это был domain.com/About, а не domain.com/StaticPages/About.

Используя маршрутизацию атрибутов, вы можете украсить свой метод действия атрибутом Route и указать [action] в качестве имени шаблона.

public class StaticPagesController : Controller
{      
    [Route("[action]")]
    public IActionResult About()
    {
        // This action method will be executed for "yourSite/About" request
        return View();
    }
}

При описанном выше подходе в вашем приложении не может быть двух методов действия с одинаковыми именами (Пример: вы не можете иметь метод действия About в HomeController и StaticPagesController)

person Shyju    schedule 21.01.2016
comment
[контроллер] в действии? - person Cool Breeze; 23.01.2016
comment
@CoolBreeze да. Чтобы сделать этот метод действия по умолчанию для контроллера. - person Shyju; 23.01.2016
comment
Это не сработало. Я не уверен, что это потому, что у меня есть следующий атрибут на моем контроллере: [Route([action])] public class StaticPagesController: Controller - person Cool Breeze; 25.01.2016
comment
Да. Вам не нужен этот атрибут уровня контроллера. Попробуйте код, который у меня есть в ответе. Он должен работать нормально. - person Shyju; 25.01.2016
comment
Я делаю это, потому что не хочу включать имя контроллера в URL-адрес. например Я хочу, чтобы это был domain.com/About, а не domain.com/StaticPages/About - person Cool Breeze; 25.01.2016
comment
К сожалению, это не приводит к желаемому поведению. Пожалуйста, смотрите обновление к моему сообщению для получения дополнительной информации. У меня это работает, так что это уже не имеет большого значения, но все еще кажется немного излишним... - person Cool Breeze; 26.01.2016
comment
Оно делает. Со вторым обновлением, когда вы получаете доступ к yourSitename/About, это идет о StatucPagesController. Я не уверен, почему вы думаете, что это нежелательное поведение? - person Shyju; 26.01.2016
comment
Потому что, когда кто-то посещает yourSitename.com, он должен перейти к представлению Index. - person Cool Breeze; 26.01.2016
comment
Это должно работать нормально, если у вас нет какого-либо пользовательского изменения маршрута. - person Shyju; 26.01.2016
comment
Не удалось заставить его работать. О, хорошо, в итоге я использовал то, что было вставлено в мой вопрос. - person Cool Breeze; 01.02.2016
comment
Он должен работать. Я создал минимальный проект и проверил его. Если вы мне не доверяете, загрузите его здесь и посмотрите сами. - person Shyju; 03.02.2016
comment
Ваш образец включает маршрутизацию на основе соглашений в Startup.cs. Я думаю, именно поэтому ваш пример работает, но не мой. - person Cool Breeze; 15.02.2016