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.

MVC5路线不工作

第一方法。
根据您的路径:

"{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