MVC5路由前缀设置,如何?

时间:2014-11-13 01:13:35

标签: c# asp.net-mvc routes asp.net-mvc-5

我想要做的是:是在动作名称后添加前缀,以便可以看到浏览器的网址栏。

http://stackoverflow.com/ask
                 ↓↓↓↓
http://stackoverflow.com/ask.mon

并且还想要使用前缀调用特定的控制器。

http://stackoverflow.com/loginProcess.mon

如果像上面那样调用,则可以调用以下操作。


更新 :(请记住,我不想在网址栏上显示我的控制器名称。)


public Class LoginController : Controller
{
     public ActionResult loginProcess() {
          return View();
     }
}
.
.

我做了什么:设置如下所示的路线配置。

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

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

并且控制器看起来像......

 public class LoginController : Controller
    {        
        public ActionResult Index()
        {
            if (Session["userInfo"] != null)
            {
                return RedirectToAction("Main", "Web");
            }
            else
            {
                return View();
            }
        }
    .
    .
    .

发生什么事:引发404错误。

我该怎么做才能避免这种情况?

2 个答案:

答案 0 :(得分:0)

要使您请求的网址(http://stackoverflow.com/login/loginProcess.mon)正常工作,您的映射不包含控制器。以下代码应修复路由。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}.mon/{id}", // Added {controller} to routing so Login/loginProcess.mon will work
    defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);

然后,LoginController中的操作代码应该可以正常运行。

public ActionResult loginProcess() {
    return View();
}

答案 1 :(得分:0)

最后,我找到了一个解决方案,您所要做的就是添加一个模块进行路由。

此模块获取您的路由以找到预期的操作。

<modules>
   <remove name="UrlRoutingModule-4.0" />
   <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
</modules>

这是此问题的另一种选择,虽然它不是解决此问题的直接方法,但这可能是一种过饱和的方法。但间接地,当行为名称后面有前缀时,它可以解决这个404错误。只需将其放在Web.config<system.webServer>部分

上即可
<modules runAllManagedModulesForAllRequests="true" />

这也有同样的效果,因为它也包括上面的模块。

我已经获取了一些可能有助于您掌握该功能的相关信息。

嗯,显然,顺便推荐runAllManagedModulesForallRequests