我一直在使用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?
感谢。
答案 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));