0

私はこれを私の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);

アプリケーションの実行時にこのエラーが発生します:指定されたキャストが無効です。

ここで何が起こったのですか?

4

1 に答える 1

1

私は変わりました

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

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

また、routes.MapRouteLowercase を MapRoute に変換して問題を解決しました。問題は LowercaseRoutesMVC DLL にあると思います。これを開発者に報告する必要があります。

于 2015-12-16T23:48:12.153 に答える