Solved

System.Net.HttpWebRequest.Create(url), something simular.

Posted on 2003-11-11
6
2,076 Views
Last Modified: 2012-05-04
Ok, what I which to acheive is to send my page to an email everytime a person views it.

The emailing part is ok, but how can I save the response.outputstream of my aspx page into a string, once it has run?

Yea it's an odd question I know.

I have this code, which does this from another page but I want to get the stuff from the page that is running.

private String readHtmlPage(string url)
{
                String result;
                System.Net.WebResponse objResponse;
     System.Net.WebRequest objRequest = System.Net.HttpWebRequest.Create(url);
     objResponse = objRequest.GetResponse();
     using (System.IO.StreamReader sr =  new System.IO.StreamReader(objResponse.GetResponseStream()) )
     {
          result = sr.ReadToEnd();
          // Close and clean up the StreamReader
          sr.Close();
     }
     return result;
}
0
Comment
Question by:iqula
  • 3
  • 3
6 Comments
 
LVL 28

Expert Comment

by:mmarinov
ID: 9730546
0
 

Author Comment

by:iqula
ID: 9730720
Thanks, but this appends to the output stream, what I need is the output stream as a string, or am I missing something here :)
0
 
LVL 28

Accepted Solution

by:
mmarinov earned 300 total points
ID: 9730804
you can see here how you can resolve the problem
http://support.microsoft.com/default.aspx?scid=kb;en-us;810205

you can get the whole code :-) and Response.Filter = new ResponseFilter(Response.Filter); not in Init like it is described but in the Application_BeginRequest in global.asax file.

B..G
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 

Author Comment

by:iqula
ID: 9731503
This looks very promising, how can I get the string instead of writinf to a file?
0
 
LVL 28

Expert Comment

by:mmarinov
ID: 9731761
you can use this code in overriden void Close()

sr = new StreamReader(@"C:\FilterOutput\response.htm");
s = sr.ReadToEnd();
sr.Close();

and after that to send s to static variable in your class

so every time you submit a page at the end of the request you will send the content of this file and when you enter again in the PageLoad you can get it

B..G
0
 

Author Comment

by:iqula
ID: 9732314
I'm not sure how you chaps know this stuff, but I'm really impressed :)

Here is my solution: Thanks

      public class EmailThisPage :Stream
      {
            //Call from an aspx page within the OnInit(EventArgs e), like this
            //------------------------------------------------------------------
            //tools.EmailThisPage ep = new tools.EmailThisPage(Response.Filter);
            //ep.From="name@domain.com";
            //ep.To="name@domain.com";
            //ep.Subject="A page email";
            //ep.SmtpServer="localhost";
            //Response.Filter = ep;
            //------------------------------------------------------------------
            private Stream m_sink;
            private long m_position;
            public string From, To, Cc, Bcc, Subject, SmtpServer;
            public Exception error;

            public EmailThisPage(Stream sink)//Response.Filter
            {
                  m_sink = sink;
            }

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

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

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

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

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

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

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

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

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

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

            // Override the Write method to filter Response to a file.
            public override void Write(byte[] buffer, int offset, int count)
            {            
                  string body;
                  //Write out the response to the browser.
                  m_sink.Write(buffer, 0, count);
         
                  body=System.Convert.ToBase64String(buffer, 0, buffer.Length);

                  System.Text.UTF8Encoding objUTF8 =new System.Text.UTF8Encoding();
                  body= objUTF8.GetString(Convert.FromBase64String(body));
                  //Write out the response to the string.
                  try
                  {

                        MailMessage Mailer = new MailMessage();
                        SmtpMail.SmtpServer = SmtpServer;
                        Mailer.From = From;
                        Mailer.To = To;
                        Mailer.Cc = Cc;
                        Mailer.Bcc = Bcc;
                        Mailer.Subject = Subject;
                        Mailer.Body =body;


                        Mailer.BodyFormat = System.Web.Mail.MailFormat.Html;
                        SmtpMail.Send(Mailer);
                  }
                  catch
                  {
                        MailMessage Mailer = new MailMessage();
                        SmtpMail.SmtpServer = SmtpServer;
                        Mailer.From = From;
                        Mailer.Cc = Cc;
                        Mailer.Bcc = Bcc;
                        Mailer.Body =body;
                        Mailer.BodyFormat = System.Web.Mail.MailFormat.Html;
                        Mailer.To =      System.Configuration.ConfigurationSettings.AppSettings["erroremail"];
                        Mailer.Subject = "Email Error (To:)" + To + " (Subject:)" + Subject;
                        SmtpMail.Send(Mailer);
                  }
            }
      }
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IP addresses can be stored in a database in any of several ways.  These ways may vary based on the volume of the data.  I was dealing with quite a large amount of data for user authentication purpose, and needed a way to minimize the storage.   …
This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question