MVC5路线不工作
本文关键字:工作 MVC5 | 更新日期: 2023-09-27 18:12:26
我最近从MVC 5升级到MVC 3。我从来没有注册过路由,但是,这个URL可以工作:
http://www.testsite.com/shipworks/index/myemail@yahoo.com ?网站= testsite.com
下面是我的代码: [HttpPost]
public ActionResult Index(string id, string website)
{
string data = string.Empty;
}
我现在得到一个404与此代码。我尝试了这条路线,但是,它也失败了:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ShipWorks", // Route name
"{controller}/{action}/{id}/{website}", // URL with parameters
new { controller = "ShipWorks", action = "Index", email = UrlParameter.Optional, website =
UrlParameter.Optional }, new[] { "CloudCartConnector.Web.Controllers" }// Parameter defaults
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我做错了什么?我把运输路线放在默认路线的上方。注意,我的id是一个字符串。URL可以使用?id=myemail@myemail.com.
第一方法。
根据您的路径:
"{controller}/{action}/{id}/{website}"
你不需要明确指定"website"属性名。然后,您在路由中标记{id}
和{website}
由斜杠/
分隔,因此正确使用您的路由掩码应该是http://www.testsite.com/shipworks/index/myemail@yahoo.com/testsite.com
。
然而,这里有一个问题-点符号.
将无法正确识别(以您想要的方式)。因此,如果您删除点,路径http://www.testsite.com/shipworks/index/myemail@yahoo.com/testsitecom
将工作。
第二方法。
为了达到你想要的结果,最好将e-mail和website作为查询参数,而不是作为路径的一部分。
您可以使用以下路由配置:
routes.MapRoute(
"ShipWorks", // Route name
"{controller}/{action}/{id}", // URL with parameters
new
{
controller = "ShipWorks",
action = "Index",
id = UrlParameter.Optional
}, new[] { "CloudCartConnector.Web.Controllers" }// Parameter defaults
);
控制器的行动:
//[HttpPost]
public ActionResult Index(string email, string website)
{
(...)
return View();
}
和查询字符串:http://www.testsite.com/shipworks/index?email=myemail@yahoo.com&website=testsite.com
。
还请注意,由于您用[HttpPost]
属性标记了Index
方法,即使您有正确的URL,您也将使用GET
方法(如在浏览器中键入)获得404
。