C# MVC5路由前缀设置,如何设置?

C# MVC5路由前缀设置,如何设置?,c#,asp.net-mvc,routes,asp.net-mvc-5,C#,Asp.net Mvc,Routes,Asp.net Mvc 5,我想做的是:在动作名称后添加前缀,这样浏览器的url栏就可以像这样显示 http://stackoverflow.com/ask ↓↓↓↓ http://stackoverflow.com/ask.mon 并且还希望使用前缀调用特定的控制器 http://stackoverflow.com/loginProcess.mon 如果像上面那样调用,那么可以调用下面的操作 已更新(请记住,我不想在url栏上显示控制器的名称。) 我所做的:如下所示设置路由配置

我想做的是:在动作名称后添加前缀,这样浏览器的url栏就可以像这样显示

http://stackoverflow.com/ask
                 ↓↓↓↓
http://stackoverflow.com/ask.mon
并且还希望使用前缀调用特定的控制器

http://stackoverflow.com/loginProcess.mon
如果像上面那样调用,那么可以调用下面的操作


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


我所做的:如下所示设置路由配置

   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错误

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

获取您请求的url(
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();
}

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

此模块获取您的路由以定位预期操作

<modules>
   <remove name="UrlRoutingModule-4.0" />
   <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
</modules>
这也具有相同的效果,因为它还包括上面的模块

我收集了一些相关信息,这些信息可能有助于您了解该功能


显然,
runAllManagedModulesForallRequests
不被推荐。

对不起,先生,我更新了我的问题。我不希望控制器的名称出现在URL栏上。我被问题中同名的两个控制器弄糊涂了,一个是action
index
,另一个是action
loginProcess
。如果您更喜欢使用索引操作来完成此工作,则将{action}替换为硬编码的loginProcess.mon/{id},然后将默认操作保留为Index。
<modules>
   <remove name="UrlRoutingModule-4.0" />
   <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />
</modules>
<modules runAllManagedModulesForAllRequests="true" />