void RewritePath(string filePath, string pathInfo, string queryString, bool setClientFilePath)
{
if (filePath == null)
{
throw new ArgumentNullException("filePath");
}
if (!VirtualPathUtility.IsValidVirtualPath(filePath))
{
throw new HttpException("'" + HttpUtility.HtmlEncode(filePath) + "' is not a valid virtual path.");
}
bool pathRelative = VirtualPathUtility.IsAppRelative(filePath);
bool pathAbsolute = pathRelative ? false : VirtualPathUtility.IsAbsolute(filePath);
HttpRequest req = Request;
if (req == null)
{
return;
}
if (pathRelative || pathAbsolute)
{
if (pathRelative)
{
filePath = VirtualPathUtility.ToAbsolute(filePath);
}
else
{
filePath = filePath;
}
}
else
{
filePath = VirtualPathUtility.AppendTrailingSlash(req.BaseVirtualDir) + filePath;
}
if (!StrUtils.StartsWith(filePath, HttpRuntime.AppDomainAppVirtualPath))
{
throw new HttpException(404, "The virtual path '" + HttpUtility.HtmlEncode(filePath) + "' maps to another application.", filePath);
}
req.SetCurrentExePath(filePath);
req.SetFilePath(filePath);
if (setClientFilePath)
{
req.ClientFilePath = filePath;
}
// A null pathInfo or queryString is ignored and previous values remain untouched
if (pathInfo != null)
{
req.SetPathInfo(pathInfo);
}
if (queryString != null)
{
req.QueryStringRaw = queryString;
}
}