ASP.NET MVC RedirectToAction не перенаправляется на индекс другого контроллера

В моем методе контроллера учетной записи/логина у меня есть что-то вроде:

var classA = GetObject(); //actual code omitted
switch(classA.PropA)
{
    case 1:
        return RedirectToAction("Action2", "Registration");
    //more case code omitted
    default:
        return RedirectToAction("Index", "Registration");
}

Все случаи работают нормально в блоке переключателей, за исключением значения по умолчанию, где предполагается переход к индексу в RegistrationController. Вместо этого я перенаправляюсь на localhost:port/Registration, где индекс действия опущен.

Он отлично работает, если ActionName изменен на что-то другое, например Index2. Также отлично работает, если имя контроллера изменено на что-то другое.

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 }
        );
     }

Заранее спасибо.


person Chen Chen    schedule 18.05.2017    source источник
comment
Что происходит, когда выполняется RedirectToAction("Index", "Registration");?   -  person User3250    schedule 18.05.2017
comment
Извините, я забыл упомянуть об этом. Вместо этого он просто переходит на localhost:port/Registration   -  person Chen Chen    schedule 18.05.2017
comment
Вы поставили отладчик на метод действия индекса?   -  person User3250    schedule 18.05.2017
comment
Он вообще не входит в регистрацию / индекс   -  person Chen Chen    schedule 18.05.2017
comment
а если ввести localhost:port/Registration/index то?   -  person Usman    schedule 18.05.2017
comment
Ручной ввод URL-адреса в браузере работает абсолютно нормально   -  person Chen Chen    schedule 18.05.2017
comment
можешь поделиться рутконфигом   -  person Usman    schedule 18.05.2017
comment
Общий. Также добавил детали, которые вы просили меня ранее в описание   -  person Chen Chen    schedule 18.05.2017
comment
@ChenChen в соответствии с вашим маршрутом это должно работать, и какую ошибку вы получаете с localhost:port/Registration/ ?   -  person Usman    schedule 18.05.2017
comment
@Usman Ошибка HTTP 403.14 - Запрещено Веб-сервер настроен так, чтобы не отображать содержимое этого каталога.   -  person Chen Chen    schedule 18.05.2017


Ответы (3)


Нет ничего плохого в том, что маршрут устанавливает причину, по которой он не включает Index в URL, потому что согласно default route

url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

когда вы вводите /Registration, маршрут уже знает действие по умолчанию, которое является index, поэтому он не добавляет /index в URL и о

403.14 запрещено

если вы посмотрите на этот пост Ошибка HTTP 403.14 - Запрещено - MVC 4 с IIS Express это может быть связано с тем, что у вас может быть файл или папка с именем Registration в каталоге проекта.

person Usman    schedule 18.05.2017
comment
Это абсолютно в точку! Спасибо! - person Chen Chen; 18.05.2017
comment
@ChenChen, вы можете принять мой ответ, если он помог :), если вы не знаете, как вы можете проверить это Как принять ответ - person Usman; 18.05.2017
comment
@ChenChen нет проблем :) - person Usman; 18.05.2017

Если вы используете RedirectionToAction("Index","ControllerName");, он перенаправит вас с конфигурацией сопоставления по умолчанию на localhost:port/ControllerName, а в вашем случае, если вы выполните RedirectionToAction("Index","ControllerName");, он перенаправит вас на localhost:port/Registration

person Hicham Bouchilkhi    schedule 18.05.2017
comment
Это многое проясняет. Спасибо. Однако регистрация является зарезервированным словом или что-то в этом роде? Поскольку я получаю сообщение об ошибке HTTP 403.14 - Forbidden, веб-сервер настроен так, чтобы не перечислять содержимое этого каталога с этим контроллером, но не с любыми другими контроллерами. - person Chen Chen; 18.05.2017

Попробуйте использовать на

return RedirectToAction("Index");

а в RouteConfig вы можете перенаправить действие «Индекс» на «Регистрацию» контроллера.

как

routes.MapRoute("Index", "Index", new { controller = "Registration", action = "Index" });
person Azhar    schedule 18.05.2017
comment
Вы также должны проверить этот код в RouteConfig. route.MapRoute(Registration, Registration/{action}/{id}, new {controller = Registration, Action = Index, id = UrlParameter.Optional}); - person Azhar; 18.05.2017