MVC 5 路由属性
Posted
技术标签:
【中文标题】MVC 5 路由属性【英文标题】:MVC 5 Routing Attribute 【发布时间】:2016-11-01 07:23:00 【问题描述】:我有 Home Controller,我的 Action 名称是 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();
【问题讨论】:
请编辑并澄清您的问题。 “对”和“错”是什么意思?您需要哪些 URL 才能工作,哪些 URL 需要阻止?您是否在“错误”的情况下遇到错误?如果是这样,它是什么?此外,根据您的标题,不清楚问题是关于属性路由还是基于约定的路由(基于约定的路由通常是您的默认路由)。 如果您满意,请您标记为已回答好吗?如果您还有任何问题,请在此处添加您的 cmets 【参考方案1】:对于Attribute Routing in 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 = ""
);
【讨论】:
routes.MapMvcAttributeRoutes();
伙计,你救了我的命!!谢谢。
对于混合项目 - Web API 和 MVC,有两个不同的功能需要启用。 WEB API - config.MapHttpAttributeRoutes(); MVC - routes.MapMvcAttributeRoutes();我们没有这个用于 MVC 的 :)【参考方案2】:
请在此处查看有关路由的信息: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 方法中。
【讨论】:
【参考方案3】:public class URLRedirectAttribute : ActionFilterAttribute
public override void OnActionExecuted(ActionExecutedContext filterContext)
string destinationUrl = "/VoicemailSettings/VoicemailSettings";
filterContext.Result = new javascriptResult()
Script = "window.location = '" + destinationUrl + "';"
;
【讨论】:
【参考方案4】:尝试将索引操作更改为:
public ActionResult Index(int? id = null)
return View();
这应该可以解决问题。因此,您可以使用“/value”将 id 作为参数传递,或者只使用“/?id=value”
【讨论】:
以上是关于MVC 5 路由属性的主要内容,如果未能解决你的问题,请参考以下文章
运用路由约束 使用属性路由 精通ASP-NET-MVC-5-弗瑞曼
asp.net 5 MVC6 中标签助手和路由属性之间的奇怪行为
Sitecore 7.5 的 MVC 检测和 WebApi 属性路由
指定HTML标签属性 |Specifying HTML Attributes| 在视图中生成输出URL |高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼