我在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);
要:
返回db.tbl_Product.Any(c => c.url == url&& c.ID == id);
我在应用程序运行时出现此错误: 指定的强制转换无效。
这里发生了什么?!
答案 0 :(得分:1)
我已经改变了
int id =(int)values [" thisID"];
到
int id = Convert.ToInt32(values [" thisID"]。ToString());
还有routes.MapRouteLowercase到MapRoute并且问题解决了,我的问题是LowcaseRoutesMVC DLL,我必须向他们的开发人员报告。