Реализация маршрутизации атрибутов - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь разобраться с маршрутизацией атрибутов в MVC.

Первоначально маршрутизация для моего контроллера карты сайта была следующей:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "SitemapXml",
            url: "sitemap.xml",
            defaults: new { controller = "Sitemap", action = "Index" }

        // Additional mappings...

    }
}

Это прекрасно работает.Но затем я попытался закомментировать вышеприведенную маршрутизацию SitemapXml и вместо этого добавить атрибут в свой контроллер.

// GET: Sitemap
[Route("sitemap.xml")]
public ActionResult Index()
{
    // Generate sitemap
}

Я также добавил следующую строку в конце RegisterRoutes:

routes.MapMvcAttributeRoutes();

Но теперь, когда я перехожу на domain.com/sitemap.xml, я получаю сообщение об ошибке «страница не найдена».

Вопросы:

  1. Какие шаги мне не хватает, чтобы получить мойработает ли атрибут маршрутизации?
  2. Поскольку сопоставления теперь можно указывать в двух местах (в виде атрибутов или задавать непосредственно в RouteCollection), что происходит, когда эти два места противоречат друг другу?

1 Ответ

0 голосов
/ 26 ноября 2018

если вы удалите расширение .xml, ваш атрибут маршрутизации будет работать отлично.И лучше использовать связанный с расширением код в методе действия.

Также убедитесь, что ваша конфигурация маршрута выглядит как (rout.MapMvcAttributeRoutes (); должна существовать до маршрута по умолчанию)

routes.MapMvcAttributeRoutes();
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
    );
...