1

给定一个“~/folder/page.aspx”形式的查询字符串url,有没有办法检查该页面是否存在于应用程序范围内?


我正在修复一个小错误,如果用户尝试从一组可公开访问的应用程序错误页面登录到应用程序,那么他们将被重定向回该公共错误页面。如果用户从该状态登录到应用程序,我被要求将用户重定向到主页。

到目前为止,我已经通过在 switch 语句中对受影响页面的路径进行硬编码来解决这个问题,并根据硬编码的路径检查查询字符串。我觉得这是 hacky 和糟糕的,并且会喜欢一个更动态的解决方案,但我似乎无法找到一个。

任何帮助将不胜感激。


编辑 - 具体来说,我首选的解决方案只是检查由查询字符串 url 定义的路径(没有确切格式的先验知识)导致应用程序范围内的指定文件夹。

4

1 回答 1

2

所以,在看了更多之后,我发现了 Server.MapPath。我可以将它与 System.IO.Directory 结合使用,以查看文件是否包含在目录中。

string targetUrl = Request.QueryString["redirect"];
string serverUrlPath = Server.MapPath(targetUrl);
string serverDirPath = Server.MapPath("~/ErrorPages");

foreach (string file in Directory.EnumerateFiles(serverDirPath))
{
  if (file.Equals(serverUrlPath, StringComparison.OrdinalIgnoreCase))
  {
    Response.Redirect(Master.ProjectSearchRedirect());
  }
}

Response.Redirect(targetUrl);

我希望有一些更精致的东西(甚至只是一个 Directory.Contains 封装)。

于 2015-01-08T16:51:51.350 回答