检查所有密钥

时间:2016-03-09 01:09:53

标签: asp.net routes

我做了一个路由,比如 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 中再注册三个路由,但我想找到(可能)更好的解决方案。

1 个答案:

答案 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
}