ASP.NET MVC 路由 - 当操作名称和 Url 相同时重定向到路由

ASP.NET MVC Routing - Redirect to Route when Action Name and Url is same

我需要根据角色重定向到不同的操作。我对 RouteConfig.cs.

进行了以下更改

RouteConfig.cs

          routes.MapRoute(
            name: "borrower",
            url: "borrower",
            defaults: new { controller = "Home", action = "Borrower" });

        routes.MapRoute(
            name: "broker",
            url: "broker",
            defaults: new { controller = "Home", action = "Broker" });                

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

这是我的控制器

HomeController.cs

public class HomeController : Controller
{
    public ActionResult Index()
    {
        if (UserPrincipal.Current.Identity.IsAuthenticated)
        {
            if (UserPrincipal.Current.IsInRole("Broker"))
            {
                return RedirectToRoute("broker");                    
            }
            else if (UserPrincipal.Current.IsInRole("Borrower"))
            {
                return RedirectToRoute("borrower");
            }                
        }
        return View();
    }

    public ActionResult Broker()
    {
        return View(); 
    }
    public ActionResult Borrower()
    {
        return View();
    }
}

代码流在 return RedirectToRoute("") 之前正常工作,但在此代码流之后永远不会进入 related/appropriate 操作并返回空视图。

注意: Broker 和 Borrower 视图都不是空的,它们有静态文本。

在网络选项卡中,您可以看到正在执行正确的重定向,浏览器中的 URL 被设置为路由 URL。

RedirectToRoute("Broker") 导致 302 响应,用户被重定向到 abc.com/broker,但 abc.com/broker 没有命中 Broker 中的操作方法 HomeController 并返回空视图。根据 RouteConfig.cs 它应该点击 Broker 操作方法。

请指出我在这里做错了什么。

原来我在 Web 项目的根目录下有一个名为 "Borker" 和 "Borrower" 的目录。由于这个 MVC 路由模块被忽略,请求(abc.com/brokerabc.com/borrower)被移动到这些目录。所以我重命名了这些目录,一切都按预期工作:)