我做了一个路由,比如 Login / {id} / {hash} / {gen} / {dt} (这是用于自动识别)。
当我使用网址“登录”和“登录/值1 /值2 /值3 /值4”时,它可以正常使用。
但是,如果我只使用一个,两个或三个路由值,它会给出错误404。
例如,“Login / value1”,“Login / value1 / value2”和“Login / value1 / value2 / value3”发生错误404(找不到页面)。
所以我需要的是如果网址与完整路由网址不匹配,我需要重定向到登录而不是 PageNotFound 页面。
“登录/值1” ==> “登录”
“登录/值1 /值2” ==> “登录”
“登录/值1 /值2 /值3” ==> “登录”
我的代码如下:
if (Page.RouteData.Values.ContainsKey("id") &&
Page.RouteData.Values.ContainsKey("hash") &&
Page.RouteData.Values.ContainsKey("gen") &&
Page.RouteData.Values.ContainsKey("dt"))
{
if (CheckUsersData())
{
Session["id"] = Page.RouteData.Values["id"].ToString();
Response.Redirect("~/Home");
}
else
Response.Redirect("~/Login"); //if auto identification data (route values) is incorrect
}
else
Response.Redirect("~/Login");
提前致谢!
注意!!! 当然,我可以在 global.asax 中再注册三个路由,但我想找到(可能)更好的解决方案。
答案 0 :(得分:0)
刚添加了三条路线,因此产生的路由是:
Login/{id}
Login/{id}/{hash}
Login/{id}/{hash}/{gen}
Login/{id}/{hash}/{gen}/{dt}
代码就像
一样简单if (Page.RouteData.Values.ContainsKey("id") &&
Page.RouteData.Values.ContainsKey("hash") &&
Page.RouteData.Values.ContainsKey("gen") &&
Page.RouteData.Values.ContainsKey("dt"))
{
if (CheckUsersData(/*my_arguments_here*/))
{
Session["id"] = Page.RouteData.Values["id"].ToString();
Response.Redirect("~/Home");
}
else
Response.Redirect("~/Login"); //if auto identification data (route values) is incorrect
}