如何向HttpGet ActionResult传值?URL访问404错误解决方案咨询
解决HttpGet ActionResult参数传递的404问题
兄弟,你碰到的HTTP 404错误是因为当前的URL格式和ASP.NET MVC默认的路由规则不匹配,导致框架找不到对应的UpdatePassword Action。下面给你两种实用的解决思路:
方法一:改用查询字符串传递参数(最简单,无需修改路由)
直接把URL改成查询字符串格式,MVC会自动把参数绑定到Action的对应参数上:
http://localhost:53081/Dashboard/UpdatePassword?Email=John@gmail.com&Token=809a5bc2-5f1b-ce5b0203ff1b
这种方式不需要改动任何路由配置,你的现有Action代码完全可以直接接收这两个参数,测试一下应该就能正常访问了。
方法二:自定义路由匹配现有URL格式
如果你坚持想用/Email=xxx/Token=xxx这种路径式的参数传递,需要调整路由规则:
方式A:全局路由配置(在RouteConfig.cs中)
在默认路由之前添加一条自定义路由,确保它先被匹配:
routes.MapRoute( name: "UpdatePasswordRoute", url: "Dashboard/UpdatePassword/Email/{Email}/Token/{Token}", defaults: new { controller = "Dashboard", action = "UpdatePassword" } ); // 原有的默认路由放在后面 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
方式B:使用特性路由(MVC5及以上版本支持)
直接给你的UpdatePassword Action添加路由特性,这样就不用修改全局路由了:
[HttpGet] [Route("Dashboard/UpdatePassword/Email/{Email}/Token/{Token}")] public ActionResult UpdatePassword(string Email, string Token) { using (var db = new MyappEntities()) { return View(); } }
注意:如果用特性路由,要确保项目已经启用了特性路由(一般在RouteConfig里有routes.MapMvcAttributeRoutes();这行代码)。
关键提醒
不管用哪种方式,都要确保路由规则的顺序——自定义路由要放在默认路由前面,不然默认路由会先匹配,还是会出现404。
内容的提问来源于stack exchange,提问作者Kevin himch
相关产品推荐
相关产品推荐

