使用Server.MapPath时,Htmlfile访问被拒绝

时间:2011-09-13 22:13:42

标签: c# asp.net

我一直在使用Server.MapPath(“page.aspx”)很长一段时间,但现在我遇到了这个问题。

基本上这是我的代码

Session.Clear();
ShowLoggedOffControl(); //A function that setup bunch of controls visibility
OnUserLoggedOut(new EventArgs());
Response.Redirect(Server.MapPath("~/Default.aspx"));

javascript执行时错误为htmlfile:access is denied。但是,当我删除Server.MapPath以使它变得像Response.Redirect("~/Default.aspx");时,事情正常。

我做错了什么?为什么,如何以及何时可以使用Server.MapPath?

感谢。

2 个答案:

答案 0 :(得分:2)

Server.MapPath将指定的相对或虚拟路径映射到服务器上的相应物理目录。所以在你的例子中,它最终会重定向到这样的东西:

c:\Projects\MyWebsite\Default.aspx

这可能不是你想要的。

另一方面,

Response.Redirect会将'〜'解析为相对路径根,并解析为:

/MyVirtualDirectory/Default.aspx

至于您何时想要使用Server.MapPath,如果您想在服务器上实际找到该文件并执行以下操作,则可以使用它:

var lines = System.IO.File.ReadAllLines(Server.MapPath("~/MyTextFile.txt"));
// Do something here with values found

答案 1 :(得分:0)

Server.MapPath获取硬盘上文件的物理路径,而Response.Redirect需要URL。

如果出于某种原因需要获取完整的网址,可以使用以下网址:

String.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl));