我的家庭控制器中有登录操作方法,如此
[HttpGet]
public ActionResult Login()
{
return View();
}
我将此Action方法作为我的应用程序的起始页面,但是我想像这样重写它 www.abc.com/MySite/security/login
我在[HttpGet]
之后写了这个属性 [Route("MySite/security/Login")]
现在问题是,当我运行应用程序时,它给我错误
The resource cannot be found.
这是我的RoutConfig
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default" ,
url: "{controller}/{action}/{id}" ,
defaults: new { controller = "Home" , action = "Login" , id = UrlParameter.Optional }
);
}
我如何解决这个问题,我也有HttpPost属性的同名方法,我是否还必须在其上写Rout属性?
答案 0 :(得分:0)
这应该做的工作:
[RoutePrefix("MySite/Security")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpGet]
[HttpPost]
[Route("Login")]
public ActionResult Login()
{
return View("~/Views/Home/Index.cshtml");
}
}
编辑:
有一种方法,但我不确定它是否是最佳方式。您需要创建另一个名为DefaultController的控制器,如下所示:
public class DefaultController : Controller
{
//
// GET: /Default/
public ActionResult Index()
{
return RedirectToAction("Login","Home");
}
}
在您的RouteConfig.cs中,更改'默认'路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
这应该可以胜任。我还在努力寻找其他更好的方法。
答案 1 :(得分:0)
首先,您应该在默认路由的顶部添加自定义路由,因为您有2个具有不同HTTP协议的操作方法,并且希望使用相同的操作名称进行自定义路由。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
// custom route
routes.MapRoute(
name: "Login",
url: "MySite/{controller}/{action}/{id}",
defaults: new { controller = "Security", action = "Login", id = UrlParameter.Optional }
);
// default route
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home" , action = "Index" , id = UrlParameter.Optional }
);
}
请注意,使用Login
方法的控制器应命名为SecurityController
,然后您可以像以下代码一样设置属性路由:
// set all default prefix to /Security path
[RoutePrefix("Security")]
public class SecurityController : Controller
{
[Route("Login")]
public ActionResult Login()
{
return View();
}
}
此外,请确保您已在Global.asax文件中注册该路线。
任何改进&建议欢迎。