MVC RouteConfig - проблема с пользовательским maproute
У меня есть это в моем 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"];
и измените эту строку:
return db.tbl_Product.Any (c => c.url == url);
Для того, чтобы:
return db.tbl_Product.Any (c => c.url == url && c.ID == id);
Я выдаю эту ошибку при запуске приложения: указанное приведение недействительно.
что здесь случилось?!
1 ответ
Решение
Я изменился
int id = (int)values ["thisID"];
в
int id = Convert.ToInt32(values ["thisID"].ToString());
и также направляет.MapRouteLowercase в MapRoute и проблема решена, я думаю, что проблема идет в DLL LowercaseRoutesMVC, и я должен сообщить об этом их разработчику.