Прочитать на английском

Поделиться через


HttpRequest.MapPath Метод

Определение

Сопоставляет виртуальный путь в запрашиваемом URL-адресе с физическим путем на сервере для текущего запроса.

Перегрузки

MapPath(String)

Сопоставляет указанный виртуальный путь с физическим путем.

MapPath(String, String, Boolean)

Сопоставляет указанный виртуальный путь с физическим путем.

MapPath(String)

Сопоставляет указанный виртуальный путь с физическим путем.

public string MapPath (string virtualPath);

Параметры

virtualPath
String

Виртуальный путь (абсолютный или относительный) для текущего запроса.

Возвращаемое значение

String

Физический путь на сервере, заданный параметром virtualPath.

Исключения

Для запроса не определен объект HttpContext.

Примеры

В следующем примере кода используется MapPath метод для преобразования виртуального пути в полный физический путь на сервере. Этот пример состоит из двух частей:

  • ASPX-страница сопоставляет путь, считывает файл и отображает результаты операции чтения.

  • Класс, UpperCaseFilterStreamкоторый изменяет все символы, передаваемые через него, в верхний регистр.

В первой части примера показано, как преобразовать виртуальный путь в полный физический путь с помощью MapPath метода. Затем этот физический путь передается объекту StreamReader , который получает содержимое файла. Write Затем вызывается метод для отображения содержимого файла на странице. Свойство Filter используется для присоединения фильтра к потоку ответа, который делает текст, отображаемый на странице всех прописных букв.

<%@ 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>

Во второй части примера показан класс, который наследует Stream и преобразует все символы потока в верхний регистр. Поместите этот код в папку App_Code для приложения.


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);
      }
   }
}

Комментарии

Внимание!

Свойство MapPath потенциально содержит конфиденциальную информацию о среде размещения. Возвращаемое значение не должно отображаться для пользователей.

Применяется к

MapPath(String, String, Boolean)

Сопоставляет указанный виртуальный путь с физическим путем.

public string MapPath (string virtualPath, string baseVirtualDir, bool allowCrossAppMapping);

Параметры

virtualPath
String

Виртуальный путь (абсолютный или относительный) для текущего запроса.

baseVirtualDir
String

Виртуальный путь к базовому каталогу, используемый для относительного разрешения.

allowCrossAppMapping
Boolean

Значение true указывает на то, что virtualPath может принадлежать другому приложению; в противном случае — значение false.

Возвращаемое значение

String

Физический путь на сервере.

Исключения

allowCrossMapping имеет значение false, а virtualPath относится к другому приложению.

-или-

Для запроса не определен объект HttpContext.

Комментарии

Внимание!

Свойство MapPath потенциально содержит конфиденциальную информацию о среде размещения. Возвращаемое значение не должно отображаться для пользователей.

Применяется к