Проблема с пользовательским маршрутом MVC RouteConfig

У меня есть это в моем routeConfig:

 routes.MapRouteLowercase(

                    name: "newProduct",

                    url: "{name}-{thisID}",


                    defaults: new

                    {

                        controller = "newProduct",

                        action = "Index",

                        name = UrlParameter.Optional


                    },
                     constraints: new { name = new MyProductConstraint() },
                    namespaces: new string[] { "khanoumiMetro.Controllers" }

                    );

и это код MyProductConstraint:

  public class MyProductConstraint : IRouteConstraint
    {
        private KhanoumiDbContext db = new KhanoumiDbContext();


        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {

            if (values.ContainsKey(parameterName))
            {
                string url = values["name"].ToString();


                using (KhanoumiDbContext db = new KhanoumiDbContext())
                {
                    db.Database.Connection.Open();

                    return db.tbl_Product.Any(c => c.url==url);
                }

            }
            return false;
        }

    }

это работает, но если я добавлю это:

int id = (int)values["thisID"];

и измените эту строку:

вернуть db.tbl_Product.Any(c => c.url==url);

To:

вернуть db.tbl_Product.Any(c => c.url==url && c.ID==id);

Я выдаю эту ошибку при запуске приложения: Указанное приведение недопустимо.

что здесь случилось ?!


person Sepehr Estaki    schedule 16.12.2015    source источник
comment
Каков тип переменной id?   -  person Thomas    schedule 17.12.2015
comment
c.ID и id имеют один и тот же тип?   -  person Thomas    schedule 17.12.2015
comment
@Thomas, это из моей модели: public int ID { get; набор; }   -  person Sepehr Estaki    schedule 17.12.2015
comment
Можете ли вы опубликовать подробности своего исключения и указать строку, которая выдает исключение, пожалуйста   -  person Thomas    schedule 17.12.2015
comment
@Thomas Я думаю, что проблема связана с DLL LowercaseRoutesMVC, которую я использую, потому что замена route.MapRouteLowercase на MapRoute решила проблему!   -  person Sepehr Estaki    schedule 17.12.2015


Ответы (1)


я изменился

int id = (int) значения ["thisID"];

to

int id = Convert.ToInt32(values["thisID"].ToString());

а также route.MapRouteLowercase в MapRoute и проблема решена, я считаю, что проблема связана с DLL LowercaseRoutesMVC, и я должен сообщить об этом их разработчику.

person Sepehr Estaki    schedule 16.12.2015