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(); 
}

MVC 5路由属性

对于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}">