MVC 5路由属性
本文关键字:属性 路由 MVC | 更新日期: 2023-09-27 17:53:30
我有主控制器,我的操作名称是Index。在我的路线配置中,路线如下。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
现在我称我的页面为http://localhost:11045/Home/Index
是正确的。
如果我像下面这样调用我的页面,它应该重定向到错误页面localhost:11045/Home/Index/98
或localhost:11045/Home/Index/?id=98
。
如何使用路由属性处理此问题。
我在控制器中的操作如下所示。
public ActionResult Index()
{
return View();
}
对于ASP.NET MVC 5中的属性路由
像这个一样装饰你的控制器
[RoutePrefix("Home")]
public HomeController : Controller {
//GET Home/Index
[HttpGet]
[Route("Index")]
public ActionResult Index() {
return View();
}
}
并在路由表中启用它,如
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//enable attribute routing
routes.MapMvcAttributeRoutes();
//convention-based routes
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = "" }
);
}
}
请在此处查看有关路由的信息:http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/asp-net-mvc-routing-overview-cs
最有可能的是,默认路由应该如下所示:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
此外,看起来索引操作方法缺少一个参数,请参阅以下内容:
public ActionResult Index(string id)
{
return View();
}
尝试将string id
放置在Index方法中。
public class URLRedirectAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
string destinationUrl = "/VoicemailSettings/VoicemailSettings";
filterContext.Result = new JavaScriptResult()
{
Script = "window.location = '" + destinationUrl + "';"
};
}
}
尝试将索引操作更改为:
public ActionResult Index(int? id = null)
{
return View();
}
这应该奏效。因此,您可以将id作为带有"/{value}"的参数传递,也可以只使用"/?id={value}">