我想要做的是:是在动作名称后添加前缀,以便可以看到浏览器的网址栏。
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错误。
我该怎么做才能避免这种情况?
答案 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
。