Asp.net mvc 4 url重写ASP.NET MVC后控制器中的参数为null

Asp.net mvc 4 url重写ASP.NET MVC后控制器中的参数为null,asp.net-mvc-4,url-rewriting,Asp.net Mvc 4,Url Rewriting,我有问题,因为我试图重写我的网址 使用默认路线,一切正常。 我在视图中有一个ActionLink,它向控制器发送一些参数 @{string selectedCar = ""; if (Request.Cookies["url"] != null) { selectedCar = Request.Cookies["url"] == null ? string.Empty : Request.Cookies["url"].Values["url"].ToString(); } string re

我有问题,因为我试图重写我的网址

使用默认路线,一切正常。 我在视图中有一个ActionLink,它向控制器发送一些参数

@{string selectedCar = "";
if (Request.Cookies["url"] != null)
{
  selectedCar = Request.Cookies["url"] == null ? string.Empty : Request.Cookies["url"].Values["url"].ToString();
}
string regExp = "[^a-zA-Z0-9]";
string productName = Regex.Replace(@c.Name, regExp, "-");
string productCode = @c.Code.Trim();
<p class="text-center text-muted">

  <a href="@Url.Action("ProductDetails", "Product" , new { category = productName, selected = selectedCar, code = productCode})" id="link">
        Details
   </a>


我试着解决,但没有任何运气。问题出在路线上,但因为我没有太多的路线经验,所以我没有弄清楚问题出在哪里。你能给个建议吗?谢谢

你所有的路线基本上都是相同的,你的链接与第一条相匹配。您需要使您的路由特定-例如,第一个路由应该是
url:“产品/子类别/{id}/{selected}/{category}/{engineId}”,
和第二个
url:“产品/产品详细信息/{category}/{selected}/{code}”‌​",
etc并且只有最后一个参数可以标记为
urlparmeter。可选
,但是因为您似乎想提供所有参数,所以只需删除它们。这个解决方案似乎解决了我的问题,但是现在控制器方法ProductDetails被调用了2次,第一次它获得了正确的参数,第二次是参数名称=Scripts和selected=“jquery-1.8.2.min.js”。加载了详细信息页面,但在后台,由于这些不正确的值,我遇到了一些异常。您知道为什么会发生这种情况吗?我假设您有其他代码进行第二次调用,但您没有向我们展示。
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 routes.MapRoute(
        name: "Categories",
        url: "{controller}/{action}/{id}/{selected}/{category}/{engineId}",
        defaults: new { controller = "Product", action = "SubCategories"
           , selected = UrlParameter.Optional,
             category = UrlParameter.Optional,
             engineId = UrlParameter.Optional
           }
       );

        routes.MapRoute(
           name: "Details",
           url: "{controller}/{action}/{category}/{selected}/{code}‌​",
           defaults: new
           {
               controller = "Product",
               action = "ProductDetails",
               category = UrlParameter.Optional,
               selected = UrlParameter.Optional,
               code = UrlParameter.Optional
           });


        routes.MapRoute(
          name: "Purchase",
          url: "{controller}/{action}/{id}/{name}‌​",
          defaults: new { controller = "Purchase", action = "PurchaseProduct", id = UrlParameter.Optional, name = UrlParameter.Optional }
      );



        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );