C# MVC5路由前缀设置,如何设置?
我想做的是:在动作名称后添加前缀,这样浏览器的url栏就可以像这样显示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栏上显示控制器的名称。) 我所做的:如下所示设置路由配置
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栏上。我被问题中同名的两个控制器弄糊涂了,一个是actionindex
,另一个是actionloginProcess
。如果您更喜欢使用索引操作来完成此工作,则将{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" />