Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
842 views
in Technique[技术] by (71.8m points)

c# - MVC RouteConfig custom maproute issue

I have this in my 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" }

                    );

and this is MyProductConstraint code :

  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;
        }

    }

it works, but if I add this :

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

and change this line :

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

To:

return db.tbl_Product.Any(c => c.url==url && c.ID==id);

I give this error when application runs : Specified cast is not valid.

what happened here ?!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I have changed

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

to

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

and also routes.MapRouteLowercase to MapRoute and problem solved, I thing the issue goes to LowercaseRoutesMVC DLL and I have to report this to their developer.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...