ارسال ایمیل در ASP.NET با استفاده از HTML Template

ارسال ایمیل در ASP.NET با استفاده از HTML Template

 

آیا تاکنون سعی کرده اید برای سایت خود خبرنامه ایجاد کنید؟ آیا تاکنون وسوسه شده اید که سیستمی طراحی کنید که در صورتی که بینندگان سایت شما نظرات خود را در سایت شما وارد کنند برای آنها یک Email تشکرآمیز ارسال کنید؟ آیا می دانید ساختن یک HTML Template زیبا برای خبرنامه شما و استفاده همیشگی از آن جهت ارسال خبرنامه در ASP.NET بسیار ساده صورت می گیرد؟ چنانچه سوالات بالا شما را به دانستن بیشتر ترغیب کرده است به شما تبریک می گویم! چرا که در ادامه این مقاله شما روش بسیار ساده ارسال Emailهای HTML زیبا را بدون اینکه نگران چگونگی کدنویسی HTML متغیر رشته ای Body در MailMessage باشید را فرا خواهید گرفت.

برای شروع بیایید به روش کار نظری بیاندازیم: خوب احتمالا شما با روش ساختن یک نمونه از آبجکت
MailMessage که در ASP.NET برای ارسال Email استفاده می شود آشنایی دارید (اگر این چنین نیست در ادامه مقاله به طور اجمالی توضیحاتی ارائه شده است) تنها قسمتی که باید مورد توجه قرار دهید این است که چگونه می توانیم Body نامه خود را به فرمت HTML و بدون نیاز به اینکه تمامی تگها را پشت سر هم در یک رشته طولانی و سردرگم کننده تایپ کنیم، درآوریم. یک ایده جالب این است که ما Template نامه خود را با استفاده از ادیتورهای WYSIWYG مثل FrontPage یا Dreamweaver طراحی کنیم و سپس تمامی کدهای HTML آن را درون یک متغیر رشته ای Import کرده و از آن استفاده کنیم. این کار بسیار آسان است. اما می توان این نامه را برای هر کاربر کمی سفارشی (Customize) کرد! برای مثال شما می توانید در ابتدای نامه کاربر را با نام وی مورد خطاب قرار دهید. بهتر است از این پس توضیحات را همراه با کدنویسی دنبال کنیم. (کلیه کدهای Server Side به زبان VB.NET نوشته شده است) سه گام اساسی برای این کار وجود دارد:

1- ساختن
Template مورد نظر شما جهت ارسال Email:
برای این کار کافی است که
Template مورد نظر خود را به فرمت HTML طراحی کنید. این به خود شما بستگی دارد که کدهای HTML را به صورت دستی بنویسید و یا از ادیتورهای WYSIWYG مانند FrontPage یا Dreamweaver یا !GoLive استفاده کنید. تنها تفاوتی که در اینجا وجود دارد این است که شما بایستی قسمتهایی از متن نامه خود را که متغیر هستند (مانند نام گیرنده Email، آدرس پست الکترونیکی وی و ...) را به گونه ای از بقیه قسمتها متمایز کنید. برای مثال اگر شما می خواهید در ابتدای نامه، دریافت کننده نامه را با نام خود مورد خطاب قرار دهید عبارت را به صورت زیر وارد کنید: "سلام "#NAME# لطفا توجه کنید که هیچ محدودیتی در تکنیک به کار رفته وجود ندارد و قرار دادن کاراکترهای ## فقط جهت متمایز ساختن این قسمت از محتوای استاتیک صفحه است و شما می توانید به صور دیگر آن را مشخص کنید مثلا ?NAME? یا هر چیز مشابه دیگر. این قسمت بعدا با نام شخص مورد نظر ما جایگزین می شود. نکته قابل ذکر دیگر اینکه چنانچه قصد دارید نامه خود را فارسی ارسال کنید تگ زیر را فراموش نکنید:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


2- خواندن فایل
Template جهت قراردادن در Body نامه شما:
پس از اینکه
Template را آماده نمودید بایستی این فایل را بخوانید، قسمتهای مورد نظر (متمایز شده با ##) را با عبارات مورد نظر خود (که می توانید از Database استخراج کنید) جایگزین کنید و این متن را به صورت یک متغیر رشته ای در Body نامه خود قرار دهید (گام 3). این کار به وسیله کد زیر صورت می پذیرد: (قبل از هر چیز شما بایستی Namespace مورد نیاز که در اینجا System.IO می باشد را Import کنید)

Imports System.IO
 
Dim reader As StreamReader
Dim strFileName As String = Server.MapPath("templatel.htm")
Dim strFileText
 
reader = File.OpenText(strFileName)
 
While reader.Peek <> -1
               strFileText += reader.ReadLine()
End While
 
reader.Close()
strFileText = Replace(strFileText, "#Username#", Name.Text)
strFileText = Replace(strFileText, "#MsgID#", Request("MsgID"))
strFileText = Replace(strFileText, "#AuthorID#", Request("AuthorID"))


حال بیایید نگاهی به کد فوق بیاندازیم: در سطر اول شما یک شی از نوع
StreamReader که جهت خواندن فایلهای متنی به کار می رود را می سازید و در سطر بعدی مسیر فیزیکی فایل Template خود را در متغیر رشته‌ای strFileName ذخیره می کنید.

نکته: در صورتیکه بخواهید در فایل کلاس خود از کد فوق استفاده کنید بایستی مسیر فیزیکی فایل را با استفاده از
System.Web.HttpContext.Current.Server.MapPath("template.htm") به دست آورید. اما در Code Behind یک WebForm همان Server.MapPath() کافی است.

سپس در سطر بعدی ما با استفاده از متد
OpenText فایل مورد نظر را باز کرده و متن آن را در Reader قرار می دهیم. حال در یک حلقه While...End While سطر به سطر فایل Template را (که در اینجا کدهای HTML ما هستند) می خوانیم و در متغیر strFileText ذخیره می کنیم. Reader.Peek <> -1 بررسی می کند که آیا به انتهای فایل رسیده ایم یا خیر. پس از اینکه کل فایل را خوانده و در متغیر ذخیره کردیم. شی reader را می بندیم.

در اینجا شما باید
Template نامه خود را برای کاربر خاص Customize کنید. یعنی عبارات محصور شده با ## را با اطلاعات کاربر (که از بانک اطلاعاتی استخراج می شود و یا از یک Query String دریافت می شود) جایگزین کنید. در مثال بالا مقدار اول در Template با مقدار یک Textbox و دو مورد بعدی با Query String های انتهای یک URL جایگزین می شود.

حاصل کار یک متغیر رشته ای به نام
strFileText است که حاوی کد HTML مورد نیاز شما برای ارسال یک HTML Email می باشد. که مثلا عبارت ابتدای آن به صورت زیر در آمده است: "سلام مهدی"

3- استفاده از قالب
Import شده فوق و ارسال Email:
حال به آسانی
Email را ساخته و ارسال می کنیم. بدین ترتیب: (Imports System.Web.Mail را فراموش نکنید!)

'Creating and sending mail to user
Dim objMail As New MailMessage()
objMail.From = "You@YourDomain.com"
objMail.To = Email.Text.Trim
objMail.Subject = "YOUR SUBJECT GOES HERE..."
objMail.BodyFormat = MailFormat.Html
objMail.BodyEncoding = System.Text.Encoding.UTF8
objMail.Body = strFileText
SmtpMail.SmtpServer = "smtp.YOURSERVER.com"
SmtpMail.Send(objMail)


این قسمت نیاز به توضیخ چندانی ندارد. جز اینکه
objMail.To را بایستی به صورت داینامیک (از DB و ...) تغییر دهید (در اینجا مقدار از یک Textbox دریافت شده است)، SMTP Server خود را مشخص کنید و Email را ارسال کنید! به همین سادگی. بقیه موارد بسیار واضح هستند.

لطفا به این نکته توجه کنید که برخی
SMTP Serverهایی که نیاز به Authentication دارند را نمی توان برای این منظور (ارسال Email به آدرس های خارج از SMTP Server فوق) مورد استفاده قرار داد. در این خصوص لطفا به Administrator سرور خود رجوع کنید.

نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده وب

 
نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده وب
 
برنامه های وب از معماری سرویس گیرنده - سرویس دهنده تبعیت نموده و بر روی سرویس دهنده وب مستقر و مسئولیت پاسخگوئی به درخواست های ارسالی توسط سرویس گیرندگان را برعهده خواهند داشت .در سمت سرویس گیرنده ، مرورگر و در سمت سرویس دهنده ، سرویس دهنده وب دارای جایگاهی خاص می باشند . مرورگر ، میزبان برنامه وب بوده و مهمترین وظیفه آن ارائه بخش رابط کاربر یک برنامه وب است . در این راستا ، مرورگر دارای پتانسیل لازم به منظور تفسیر و نمایش تگ های HTML می باشد .در سمت سرویس دهنده ، برنامه های وب با نظارت و مدیریت یک سرویس دهنده وب ( مثلا" IIS ) اجراء می گردند . سرویس دهنده وب ، مسئولیت مدیریت برنامه ، پردازش درخواست های ارسالی توسط سرویس گیرندگان و ارائه پاسخ لازم به سرویس گیرندگان را بر عهده دارد .به منظور قانونمند کردن ارسال درخواست سرویس گیرندگان و ارائه پاسخ سرویس دهنده ، می بایست از یک پروتکل ارتباطی خاص استفاده گردد. پروتکل ، مجموعه ای از قوانین لازم بمنظور تشریح نحوه ارتباط دو و یا چندین آیتم از طریق یک محیط انتقال ( زیر ساخت انتقال داده ) نظیر اینترنت است . در برنامه های وب ( ارسال درخواست توسط سرویس گیرنده و پاسخ به درخواست توسط سرویس دهنده ) از پروتکل ارتباطی HTTP)Hypertext Transport Protocol) ، استفاده می گردد.
ASP.NET پلات فرم مایکروسافت برای طراحی و پیاده سازی برنامه های وب در دات نت می باشد . پس از درخواست یک صفحه ASP.NET توسط مرورگر سرویس گیرنده ، پردازش های متعددی بر روی سرویس دهنده وب به منظور ارائه پاسخ لازم ، انجام خواهد شد.شاید تاکنون سوالات مختلفی در رابطه با نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده ، برای شما مطرح شده باشد :

پس از درخواست یک صفحه ASP.NET ، بر روی سرویس دهنده وب چه اتفاقی می افتد ؟
نحوه برخورد سرویس دهنده وب با درخواست ارسالی توسط سرویس گیرنده چگونه است ؟
تگ های HTML چگونه تولید و برای مرورگر ارسال می گردد؟
و شاید سوالات دیگر!
در این مقاله قصد داریم با نحوه پردازش صفحات ASP.NET بر روی سرویس دهنده بیشتر آشنا شویم . بدیهی است تشریح تمامی مراحل با ذکر جزئیات از حوصله یک مقاله خارج بوده و هدف آشنائی با کلیات موضوع با یک روند مشخص و سیستماتیک است .

مرحله اول : ایجاد یک درخواست HTTP برای یک صفحه ASP.NET توسط مرورگر
پردازش با درخواست یک صفحه ASP.NET که توسط مرورگر ایجاد می شود ، آغاز می گردد .مثلا" یک کاربر ممکن است در بخش آدرس مرورگر کامپیوتر خود آدرس www.srco.ir//Articles/DocView.asp?ID=210 را به منظور دریافت این مقاله وارد نماید . مرورگر در ادامه یک درخواست HTTP را از سرویس دهنده وب محل استقرار سایت Srco.ir ایجاد و درخواست فایل حاوی مقاله را می نماید .

مرحله دوم : دریافت درخواست HTTP ، توسط سرویس دهنده وب
مهمترین وظیفه سرویس دهنده وب ، دریافت درخواست ارسالی HTTP و ارائه منبع درخواست شده درقالب یک پاسخ HTTP است . سرویس دهنده وب ( مثلا" IIS ) ، پس از دریافت درخواست ارسال شده توسط سرویس گیرنده ، تصمیم لازم در رابطه با نحوه برخورد با آن را اتخاذ می نماید. محور تصمیم گیری فوق بر پایه نوع انشعاب فایل درخواستی استوار می باشد. مثلا" در صورتیکه فایل درخواستی دارای انشعاب asp. ، باشد ، IIS درخواست را به سمت asp.dll هدایت تا عملیات مرتبط با آن انجام شود . انشعابات فایل متعددی به موتور ASP.NET ، مپ می گردند . برخی از آنان شامل موارد زیر می باشد :

انشعاب aspx . ، برای صفحات وب ASP.NET
انشعاب asmx . ، برای سرویس های وب ASP.NET
انشعاب config . ، برای فایل های پیکربندی ASP.NET
انشعاب ashx . ، برای هندلرهای سفارشی ASP.NET HTTP
انشعاب rem . ، برای منابع راه دور
و سایر انشعابات دیگر


پس از دریافت درخواست ارسالی توسط سرویس گیرنده ، سرویس دهنده وب آن را در اختیار مسئول مربوطه قرار خواهد داد . مثلا" در صورتیکه درخواست دریافتی مربوط به یک صفحه ASP کلاسیک باشد ، درخواست در اخـتیار asp.dll گذاشته شده و یا در صورتیکه درخواست در ارتباط با یک صفحه ASP.NET باشد ، درخواست در اختیار موتور ASP.NET قرار داده می شود . همانگونه که اشاره گردید ، معیار اصلی در این تصمیم گیری ، نوع انشعاب فایل درخواست شده توسط سرویس گیرنده می باشد . شکل زیر مراحل اول و دوم اشاره شده را نشان می دهد .


منبع : http://www.4guysfromrolla.com

مرحله سوم : عملکرد موتور ASP.NET
پس از درخواست یک صفحه ASP.NET توسط سرویس گیرنده و دریافت آن توسط سرویس دهنده وب ، درخواست دریافتی در اختیار موتور ASP.NET قرار داده می شود . از موتور ASP.NET ، اغلب با نام ASP.NET HTTP pipeline یاد می گردد. علت نامگذاری فوق ، بدین دلیل است که درخواست دریافتی از بین تعداد متغیری از HTTP modules در بین مسیر خود برای رسیدن به یک HTTP handler عبور می نماید . HTTP modules ، کلاس هائی می باشند که امکان دستیابی به درخواست دریافتی را دارا می باشند. این ماژول ها قادر به بازبینی و بررسی درخواست دریافتی و اتخاد تصمیماتی می باشند که مستقیما" بر نحوه گردش داخلی ( روند برخورد با درخواست ) تاثیر خواهد گذاشت . درخواست دریافتی پس از عبور از ماژول های مسخص شده HTTP ، به یک HTTP Handler خواهد رسید . HTTP Handler مسئولیت ایجاد خروجی لازم به منظور ارسال برای مرورگر متقاصی ( ارسال کننده درخواست ) را برعهده دارد. شکل زیر ، pipline یک درخواست ASP.NET را نشان می دهد .


منبع : http://www.4guysfromrolla.com

تعداد زیادی از ماژول های HTTP از قبل ایجاد شده، بصورت پیش فرض در HTTP pipline وجود دارد:

OutputCache ، مسئولیت برگرداندن و Caching خروجی صفحات HTML در صورت نیاز ، برعهده دارد .

Session ، ماژول فوق ، مسئولیت لود Session state را بر اساس درخواست دریافتی کاربر و روش Session که در فایل Web.config مشخص شده است ، برعهده دارد .

FormsAuthentication ، ماژول فوق ، مسئولیت تائید کاربران بر اساس مدل تعریف شده Forms Authentication را در صورت ضرورت برعهده دارد .

و موارد دیگر

به منظورآشنائی با ماژول های پیش فرض، می توان مقادیر نسبت داده شده به عنصر <httpModules> در فایل machine.config را مشاهده نمود. جدول زیر مقدار پیش فرض عنصر <httpModules> را نشان می دهد .

machine.Config: httpModules Section
Path : $WINDOWS$Microsoft.NETFramework$VERSION$CONFIG

<httpModules>
<add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/>
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/>
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/>
<add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/>
<add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/>
<add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile,
Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</httpModules>


هندلرهای HTTP ، نقطه پایان در ASP.NET HTTP pipeline می باشند . مسئولیت HTTP handler ، تولید خروجی برای منبع درخواست شده است . برای صفحات ASP.NET ، این به معنی Rendering ، کنترل های وب به HTML و برگرداندن HTML می باشد. برای یک سرویس وب ، مسئولیت فوق ، شامل اجرای متد مشخص شده و Wrapping مقایر برگردانده شده به یک پاسخ مناسب و با فرمت SOAP می باشد . منابع متفاوت ASP.NET از هندلرهای متفاوت HTTP استفاده می نمایند.هندلرهای پیش فرص استفاده شده ، توسط بخش <httpHandlers> فایل machine.config مشخص شده اند. بخش فوق، شامل کلاس هائی است که یا خود HTTP handler بوده و یا HTTP handler factories ، می باشند. یک HTTP handler factory ، صرفا" یک نمونه از یک HTTP handler را پس از فراخوانی ، برمی گرداند . جدول زیر ، اطلاعات عنصر <httpHandlers> در فایل machine.config را نشان می دهد .

machine.Config: httpHandlers Section
Path : $WINDOWS$Microsoft.NETFramework$VERSION$CONFIG

<httpHandlers>
<add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler"/>
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory"/>
. ...
<add verb="*" path="*.resources" type="System.Web.HttpForbiddenHandler"/>
<add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler"/>
<add verb="*" path="*" type="System.Web.HttpMethodNotAllowedHandler"/>
</httpHandlers>


لازم است به این نکته اشاره گردد که امکان ایجاد HTTP modules و HTTP handler اختصاصی ، توسط طراحان وپیاده کنندگان برنامه های وب ASP.NET نیز وجود دارد . پس از ایجاد ماژول ها و هندلرهای HTTP ، می توان آنان را به pipeline ملحق تا برای تمامی سایت های وب موجود بر سرویس دهنده وب ، قابل استفاده گردند. بدین منظور، می توان تغییرات لازم را در فایل machine.config اعمال تا زمینه استفاده از آنان توسط تمامی برنامه های وب فراهم گردد . در این رابطه می توان تغییرات را در فایل Web.config نیز اعمال نمود، در چنین مواردی امکان استفاده از ماژول ها و هندلرهای HTTP ایجاد شده ، صرفا" برای یک برنامه وب وجود خواهد داشت .

مرحله چهارم : تولید خروجی
آخرین مرحله درارتباط با پردازش یک صفحه ASP.NET بر روی سرویس دهنده وب ، شامل ایجاد خروجی مناسب است . خروجی فوق ، در ادامه از طریق ماژول های HTTP عبور داده شده تا مجددا" به IIS برسد . در نهایت IIS ، خروجی تولید شده را برای سرویس گیرنده متقاصی ارسال می نماید .مراحل لازم به منظور تولید خروجی با توجه به HTTP handler متفاوت بوده و در ادامه صرفا" یک حالت خاص آن را بررسی می نمائیم ( هندلر HTTP که از آن به منظور rendering صفحات ASP.NET استفاده می گردد).
سرویس دهنده وب (IIS) پس از دریافت درخواستی برای یک صفحه ASP.NET ( انشعاب فایل aspx.) ، آن را در اختیار موتور ASP.NET ، قرار خواهد داد. درخواست دریافتی در ادامه از بین ماژول ها عبور داده شده تا به PageHandlerFactory برسد ( در بخش <httpHandlers> فایل machin.config که قبلا" mapping آن انجام شده است ) .

machine.Config: httpHandlers Section :PageHandlerFactory
Path : $WINDOWS$Microsoft.NETFramework$VERSION$CONFIG

<httpHandlers>
...
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
. ...
</httpHandlers>


کلاس PageHandlerFactory ، یک HTTP handler factory است که وظیفه آن ارائه نمونه ای از یک HTTP handlerبوده که قادر به برخورد مناسب با درخواست ارسالی است.مهمترین رسالت PageHandlerFactory ، یافتن کلاس ترجمه شده ای است که نشاندهنده صفحه ASP.NET درخواستی می باشد. در صورتیکه از ویژوال استودیو دات نت به منظور ایجاد صفحات ASP.NET استفاده می گردد ، صفحات وب از دو فایل جداگانه ( یک فایل با انشعاب aspx . ، شامل صرفا" کنترل های وب و تگ های HTML و یک فایل aspx.vb و یا aspx.cs شامل کلاس code-behind ( کد سمت سرویس دهنده ) ) ، تشکیل می گردند. در صورتیکه از ویژوال استودیو دات نت استفاده نمی گردد ، می توان از یک بلاک سمت سرویس دهنده <Script> استفاده تا کد سمت سرویس دهنده را درخود نگهداری نماید . صرفنظر از اینکه از کدام رویکرد استفاده می گردد ، زمانیکه صفحه ASP.NET اولین مرتبه و پس از ایجاد تغییر در تگ های HTML و یا محتوی کنترل وب ، مشاهده می گردد ، موتور ASP.NET یک کلاس که مشتق شده از کلاس System.Web.UI.Page می باشد را ایجاد می نماید . کلاس فوق بصورت اتوماتیک ایجاد و کمپایل می گردد .
Page Class ، عملیات پیاده سازی IhttpHandler را انجام خواهد داد. PageHandlerFactory ، در ادامه بررسی لازم در خصوص وجود یک نسخه کمپایل شده از صفحه ASP.NET درخواستی را انجام خواهد داد. در صورتیکه صفحه ترجمه شده وجود نداشته باشد ، PageHandlerFactory آن را بصورت پویا ایجاد و ترجمه خواهد کرد . کلاس فوق ، در ادامه متد خاصی را به منظور تولید HTML ، فرا می خواند . اطلاعات تولید شده به فرمت HTML ، در نهایـت برای سرویس گیرنده ارسال می گردد.وجود تاخیر در مشاهده صفحات ASP.NET که بر روی آنان تغییراتی اعمال شده است ( HTML و یا محتوی کنترل وب) ، بدین دلیل است که موتور ASP.NET نیازمند ایجاد و ترجمه مجدد کلاس مرتبط با صفحه ASP.NET می باشد.



پس از ایجاد و ترجمه کلاس توسط PageHandlerFactory ، امکان فراخوانی کلاس ایجاد شده به منظور تولید HTML ، فراهم می گردد . فرآیند Rendering که شامل بدست آوردن HTML لازم برای صفحه ASP.NET درخواست شده می باشد از حوصله این مقاله خارج بوده و می توان در این رابطه از مقاله The ASP.NET Page Object Model استفاده نمود .

نشان دادن قابلیتهای مرورگر در ASP.NET

 
نشان دادن قابلیتهای مرورگر در ASP.NET

اگرچه در حال حاضر جنگ مرورگرها تقریبا تمام شده است اما این موضوع دلیلی بر شناخته نشدن قابلیتهای مرورگرها نیست. در اینجا توانایی ASP.NET در نشان دادن قابلیتهای مرورگرها بحث شده است. بعنوان نمونه، مثال ۱ نوع مرورگر را به ما نشان می دهد.

<html><body>
You are using <% =Request.Browser.Type %>
</body></html>

برای نمونه اگر شما از IE 5 استفاده می کنید نتیجه خروجی چنین باید باشد:

You are using IE5

در مثال ۱ Request.Browser.Type یک رشته را که همان نام ونسخهی مرورگر است را بر می گرداند. اما این موضوع چگونه صورت میگیرد ؟

شئ HTTPBrowserCapabilities 
در حقیقت خاصیت
Browser در شئ Request کلاسی از HTTPBrowserCapabilities است که در فضانام System.Web قراردارد. وقتی که این کلاس روی یک صفحه ASP.NET نمونه سازی می شود خواص صفحه سرویس گیرنده ای را نشان می دهد که از آن برای اجرا شدن کد استفاده شده است. شئ Request در برگیرنده این خاصیت مرورگر است که این کلاس را میتوان معادل کلاس MSWC. BrowserCapabilities در ASP کلاسیک در نظر گرفت.

در لیست زیر اکثر خاصیتهای شی HTTPBrowserCapabilities تشریح شده است:

ActiveXControls: نشان می دهد که مرورگر اکتیویکس را ساپورت می کند یا نه.
AOL: چک می کند که مرورگر از نوع AOL است یا نه.
Cookies: نشان می دهد که مرورگر کوکی ها را ساپورت می کند یا نه باید توجه داشت که این خاصیت وضعیت فعال بودن یا غیر فعال بودن کوکی ها را نشان نمی دهد.
Crawler: نشان میدهد که مرورگر سرویس گیرنده از موتورهای جستجو تاثیر می پذیرد یا نه.
Browser: نوع مرورگر را نشان می دهد.
Frames: نشان می دهد که مرورگر از قابلیت Frame برخورداراست یا نه.
MajorVersion: نسخه اصلی مرورگر را نشان می دهد بعنوان مثال در IE5 عدد 5 نشانگر نسخه اصلی است.
MinorVersion: نسخه جزیی (کوچکتر) مرورگر را نشان می دهد بعنوان مثال در IE5.1 عدد .1 نشانگر نسخه جزیی است.
Type: نوع ونسخه مرورگر را بصورت یک رشته بازمیگرداند..
VBScript: نشان می دهد که مرورگر VBScript را ساپورت می کند یا نه.
Version: نسخه اصلی و جزیی مرورگر را بعنوان یک رشته برمی گرداند.

در زیر نمونه کامل یک مثال آورده شده است.

<%@ page language="VB" %>
<%@ Import Namespace="System.Web" %>
<html>
<body>
<head><title>HTTPBrowserCapabilities Demo</title></head>

<%
Dim browserObj As HTTPBrowserCapabilities
browserObj = Request.Browser
%>
<font face="verdana, arial" size=2>

<p>Your browser supports ActiveX controls: <%=browserObj.ActiveXControls %> </p> 
<p>Your browser type: <%=browserObj.Type %> </p>
<p>Your browser version: <%=browserObj.Version%> </p>

... Add any other property that you would like to display

</font>
</body>
</html>