HttpRequest.MapPath HttpRequest.MapPath HttpRequest.MapPath HttpRequest.MapPath Method

定义

为当前请求将请求的 URL 中的虚拟路径映射到服务器上的物理路径。Maps the virtual path in the requested URL to a physical path on the server for the current request.

重载

MapPath(String) MapPath(String) MapPath(String) MapPath(String)

将指定的虚拟路径映射到物理路径。Maps the specified virtual path to a physical path.

MapPath(String, String, Boolean) MapPath(String, String, Boolean) MapPath(String, String, Boolean) MapPath(String, String, Boolean)

将指定的虚拟路径映射到物理路径。Maps the specified virtual path to a physical path.

MapPath(String) MapPath(String) MapPath(String) MapPath(String)

将指定的虚拟路径映射到物理路径。Maps the specified virtual path to a physical path.

public:
 System::String ^ MapPath(System::String ^ virtualPath);
public string MapPath (string virtualPath);
member this.MapPath : string -> string
Public Function MapPath (virtualPath As String) As String

参数

virtualPath
String String String String

当前请求的虚拟路径(绝对路径或相对路径)。The virtual path (absolute or relative) for the current request.

返回

virtualPath 指定的服务器物理路径。The physical path on the server specified by virtualPath.

异常

没有为请求定义 HttpContext 对象。No HttpContext object is defined for the request.

示例

下面的代码示例使用MapPath方法将虚拟路径转换为服务器上的完全限定的物理路径。The following code example uses the MapPath method to convert a virtual path to a fully qualified physical path on the server. 此示例包含两个部分:This example has two parts:

  • .Aspx 页映射路径,读取文件,并显示读取操作的结果。An .aspx page maps the path, reads the file, and displays results of the read operation.

  • 一个类UpperCaseFilterStream,它将通过其传递的所有字符更改为大写。A class, UpperCaseFilterStream, that changes all characters passed through it to uppercase.

该示例的第一部分演示如何使用MapPath方法将虚拟路径转换为完全限定的物理路径。The first part of the example shows how to convert a virtual path to a fully qualified physical path using the MapPath method. 然后,将此物理路径传递给StreamReader一个对象,该对象获取文件的内容。This physical path is then passed to a StreamReader object, which obtains the contents of the file. 然后Write调用方法以在页面上显示该文件的内容。The Write method is then called to display the content of the file on the page. Filter属性用于将筛选器附加到响应流,使文本显示为大写页面。The Filter property is used to attach a filter to the response stream that makes the text displayed to the page all uppercase.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ import Namespace="Samples.AspNet.CS.Controls"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    private void Page_Load(object sender, EventArgs e)
    {

      // Filter the text to be rendered as all uppercase.
      Response.Filter = new UpperCaseFilterStream(Response.Filter);

      // Convert a virtual path to a fully qualified physical path.
      string fullpath = Request.MapPath("~\\TestFile.txt");

      try
      {
        // Read the contents of the file using a StreamReader.
        using (StreamReader sr = new StreamReader(fullpath))
        while (sr.Peek() >= 0)
        {
          Response.Write((char)sr.Read());
        }
        Message.Text = "Reading the file was successful.";
        
      }
      catch (Exception ex)
      {
        Message.Text = "The process failed.";
      }    
     }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>HttpResponse.MapPath Example</title>
  </head>
  <body>
    <form id="form1" runat="server">

      <asp:Label id="Message" 
                 runat="server"/>

    </form>
  </body>
</html>
<%@ Page Language="VB" Debug="true"%>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="Samples.AspNet.VB.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
     
  Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
      
    ' Filter the text to be rendered as all uppercase.
    Response.Filter = New UpperCaseFilterStream(Response.Filter)
    
    ' Convert a virtual path to a fully qualified physical path.
    Dim fullpath As String = Request.MapPath("~\\TestFile.txt")
    
    Try
      
      Dim sr As StreamReader = New StreamReader(fullpath)
      
      Do While sr.Peek() >= 0
        Response.Write(Convert.ToChar(sr.Read()))
      Loop
      sr.Close()
      Message.Text = "Reading the file was successful."
      
    Catch ex As Exception
      
      Message.Text = "The process failed."

    End Try

    
  End Sub

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
  <head>
    <title>HttpResponse.MapPath Example</title>
  </head>
  <body>
    <form id="Form1" runat="server">

      <asp:Label id="Message" 
                 runat="server"/>

    </form>
  </body>
</html>

该示例的第二部分演示从Stream继承的类,并将流中的所有字符转换为大写。The second part of the example shows a class that inherits from Stream and converts all characters in a stream to uppercase. 将此代码放在App_Code应用程序的文件夹中。Put this code in the App_Code folder for your application.


using System;
using System.IO;
using System.Text;

namespace Samples.AspNet.CS.Controls
{

   public class UpperCaseFilterStream : Stream
   // This filter changes all characters passed through it to uppercase.
   {
      private Stream strSink;
      private long lngPosition;

      public UpperCaseFilterStream(Stream sink)
      {
          strSink = sink;
      }

      // The following members of Stream must be overriden.
      public override bool CanRead
      {
         get { return true; }
      }

      public override bool CanSeek
      {
         get { return true; }
      }

      public override bool CanWrite
      {
         get { return true; }
      }

      public override long Length
      {
         get { return 0; }
      }

      public override long Position
      {
         get { return lngPosition; }
         set { lngPosition = value; }
      }

      public override long Seek(long offset, System.IO.SeekOrigin direction)
      {
         return strSink.Seek(offset, direction);
      }

      public override void SetLength(long length)
      {
         strSink.SetLength(length);
      }

      public override void Close()
      {
         strSink.Close();
      }

      public override void Flush()
      {
         strSink.Flush();
      }

      public override int Read(byte[] buffer, int offset, int count)
      {
         return strSink.Read(buffer, offset, count);
      }

      // The Write method actually does the filtering.
      public override void Write(byte[] buffer, int offset, int count)
      {
         byte[] data = new byte[count];
         Buffer.BlockCopy(buffer, offset, data, 0, count);
         string inputstring = Encoding.ASCII.GetString(data).ToUpper();
         data = Encoding.ASCII.GetBytes(inputstring);
         strSink.Write(data, 0, count);
       
      }
   }
}
Imports System.IO
Imports System.Text


Namespace Samples.AspNet.VB.Controls

    Public Class UpperCaseFilterStream
        Inherits Stream

        ' This filter changes all characters passed through it to uppercase.
        Private strSink As Stream
        Private lngPosition As Long


        Public Sub New(ByVal sink As Stream)
            strSink = sink
        End Sub

        ' The following members of Stream must be overriden.  
        Public Overrides ReadOnly Property CanRead() As Boolean
            Get
                Return True
            End Get
        End Property

        Public Overrides ReadOnly Property CanSeek() As Boolean
            Get
                Return True
            End Get
        End Property

        Public Overrides ReadOnly Property CanWrite() As Boolean
            Get
                Return True
            End Get
        End Property

        Public Overrides ReadOnly Property Length() As Long
            Get
                Return 0
            End Get
        End Property

        Public Overrides Property Position() As Long
            Get
                Return lngPosition
            End Get
            Set(ByVal value As Long)
                lngPosition = Value
            End Set
        End Property

        Public Overrides Function Seek( _
        ByVal offset As Long, ByVal direction As System.IO.SeekOrigin) As Long
            Return strSink.Seek(offset, direction)
        End Function 'Seek


        Public Overrides Sub SetLength(ByVal length As Long)
            strSink.SetLength(length)
        End Sub


        Public Overrides Sub Close()
            strSink.Close()
        End Sub


        Public Overrides Sub Flush()
            strSink.Flush()
        End Sub


        Public Overrides Function Read( _
        ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
            Return strSink.Read(buffer, offset, count)
        End Function 'Read


        ' The Write method actually does the filtering.
        Public Overrides Sub Write( _
        ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)

            Dim data(count) As Byte
            System.Buffer.BlockCopy(buffer, offset, data, 0, count)
            Dim inputstring As String = Encoding.ASCII.GetString(data).ToUpper()
            data = Encoding.ASCII.GetBytes(InputString)
            strSink.Write(data, 0, count)

        End Sub

    End Class

End Namespace

注解

注意

MapPath属性可能包含有关宿主环境的敏感信息。The MapPath property potentially contains sensitive information about the hosting environment. 不应向用户显示返回值。The return value should not be displayed to users.

MapPath(String, String, Boolean) MapPath(String, String, Boolean) MapPath(String, String, Boolean) MapPath(String, String, Boolean)

将指定的虚拟路径映射到物理路径。Maps the specified virtual path to a physical path.

public:
 System::String ^ MapPath(System::String ^ virtualPath, System::String ^ baseVirtualDir, bool allowCrossAppMapping);
public string MapPath (string virtualPath, string baseVirtualDir, bool allowCrossAppMapping);
member this.MapPath : string * string * bool -> string
Public Function MapPath (virtualPath As String, baseVirtualDir As String, allowCrossAppMapping As Boolean) As String

参数

virtualPath
String String String String

当前请求的虚拟路径(绝对路径或相对路径)。The virtual path (absolute or relative) for the current request.

baseVirtualDir
String String String String

用于相对解析的虚拟基目录路径。The virtual base directory path used for relative resolution.

allowCrossAppMapping
Boolean Boolean Boolean Boolean

true 表示 virtualPath 可能属于另一个应用程序;否则,为 falsetrue to indicate that virtualPath may belong to another application; otherwise, false.

返回

服务器上的物理路径。The physical path on the server.

异常

allowCrossMappingfalsevirtualPath 属于另一个应用程序。allowCrossMapping is false and virtualPath belongs to another application.

-or- 没有为请求定义 HttpContext 对象。No HttpContext object is defined for the request.

注解

注意

MapPath属性可能包含有关宿主环境的敏感信息。The MapPath property potentially contains sensitive information about the hosting environment. 不应向用户显示返回值。The return value should not be displayed to users.

适用于