RedirectToAction, где контроллер находится в области - PullRequest
4 голосов
/ 03 февраля 2020

Я начинаю с ASP. Net core MVC 3.1 и имею область с именем Foo :

endpoints.MapAreaControllerRoute(
    name: "Foo",
    areaName: "Foo",
    pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);

И в этой области контроллер называется Тест с действием Индекс : https://localhost:44390/Foo/Test/ - это работает нормально.

Я пытаюсь перенаправить на него другой контроллер с

return RedirectToAction("Index", "Test", new { area = "Foo" });

но это отправляет меня на https://localhost:44390/Test?area=Foo

Как я могу использовать RedirectToAction(), чтобы в итоге https://localhost:44390/Foo/Test/?

Ответы [ 4 ]

0 голосов
/ 04 февраля 2020

Вы можете использовать следующий код

установить маршрут в Настроить :

"{area:exists}/{controller=Home}/{action=Index}/{id?}"

затем

public IActionResult Index()
{
   return RedirectToAction("Index", "Test", new { area = "Foo" });
}

затем

[Area("Foo")]
[Route("[controller]")]
public class TestController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
0 голосов
/ 03 февраля 2020

Я думаю, что вы должны ниже код:

namespace Solution.Areas.ControlPanel.Controllers
{
    [Area(nameof(Foo))]
    [Route(nameof(Foo) + "/[controller]")]
    public class HomeController : Controller
    {
        public IActionResult Index() => View();
    }
}
0 голосов
/ 04 февраля 2020

Я воспроизвожу вашу проблему, когда MapAreaControllerRoute размещен после маршрута по умолчанию. Поэтому, чтобы решить эту проблему, конфигурация вашего регионального маршрута должна go на первом месте.

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapAreaControllerRoute(
               name: "Foo",
               areaName: "Foo",
               pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
           );
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");

        });
0 голосов
/ 03 февраля 2020

поместите эти атрибуты в тестовый контроллер.

[Area(nameof(Foo))]
[Route(nameof(Foo) + "/[controller]")]

Образец изображения

...