MVC не перенаправляется только к одному из результатов действия моего контроллера? - PullRequest
0 голосов
/ 15 мая 2018

У меня действительно странный вопрос, который я не могу понять.Я не специалист по маршрутизации, но это должно быть прямо.

У меня есть контроллер под названием NewsletterController, и он имеет типичный индекс ActionResult.Если я запускаю свой сайт в режиме отладки и использую ссылку для перехода в раздел «Рассылка», я получаю сообщение 403.14 Forbidden.Если я добавлю «Индекс» к маршруту, то он просто перейдет в ActionResult.У меня есть другие контроллеры, настроенные с Index ActionResult точно таким же образом и работают просто отлично.Это что-то в этом конкретном контроллере, которое не работает, и я просто не вижу, в чем проблема.

Это код моего контроллера:

public class NewsletterController : Controller
{
    public ActionResult Index()
    {
        var vm = new NewsletterViewModel();
        ...CODE REMOVED FOR SPACE

        return View(vm);
    }
}

Это ссылка действия из моего _Layout.cshtml:

@Html.ActionLink("Newsletters", "Index", "Newsletter", null, new { @class = "nav-link" })

Мой класс маршрутизации

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

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

Если я пойду сюда, я получу сообщение 403.14 Forbidden.

http://localhost:59571/Newsletter/

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

http://localhost:59571/Newsletter/index

1 Ответ

0 голосов
/ 15 мая 2018

403.14 Forbidden обычно возникает, когда вы пытаетесь перейти к каталогу на сайте, и на веб-сайте не включена функция просмотра каталогов, а документ по умолчанию не настроен.

В этом случае у вас есть фактическая папка Newsletter, которая конфликтует с маршрутом по умолчанию NewsletterController, когда вы пытаетесь вызвать

http://localhost:59571/Newsletter/

Он попытается вернуть фактическое содержимое этой папки, что приведет к сбою, если эта функция не включена.

Либо удалите, либо переименуйте папку, чтобы она не конфликтовала ни с одним из имен ваших контроллеров

...