سلام
من کد زیر رو در web.config قرار دادم که درواقع صفحات هم با aspx هم بدون پسوند aspx باز میشن:
<system.webServer> <rewrite> <rules> <rule name="RewriteASPX"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="{R:1}.aspx" /> </rule> </rules> </rewrite> </system.webServer>
میخوام کاری کنم که وقتی صفحه رو با aspx باز میکنیم خودکار اون aspx رو حذف کنه آیا راهی داره؟
و یک سوال دیگر اینکه اگر برای سایت اصلا از membership استفاده نکنم و هیچ کد لاگین و ثبت نام ننویسم و برای پوشه پنل از داخل هاست Password-Protected Directories بذارم امنیت سایت پایین میاد؟ آیا این روش اصلا صحیح هست یا نه؟
این روش منسوخ شده از FRouting استفاده کنید
توی برنامه نویسان مقاله دربارش نیست استاد؟
آخه سرچ زدم نتیجه ای پیدا نکردم
توی موتور جستجوگر هم سرچ زدم
خیلی ممنون
ممکنه درباره سوال دومم یک توضیح مختصر بدین؟
این سوال بخاطر این اومد توی ذهنم که دیدم یکی از دوستانم تمام سایت هایی که نوشته بدون لاگین هستن فقط از داخل هاست به پنلشون رمز داده! خواستم بدونم وقتی سایت ما 1 ادمین بیشتر نداره دلیل اینکه از لاگین استفاده کنیم چیه؟ اگه از توی هاست رمز بذاریم امنیت کم میشه یا ...
بدون لاگین چگونه ادمین وارد سیستم بشه ؟
اون برای ورود به پنل هاست هست نه سایت
درواقع اصلا لاگین نمیکنه استاد
تمام صفحات مربوط به مدیریت مثلا داخل پوشه admin باشه بعد برای پوشه admin از داخل هاست یوزر بسازیم که هر صفحه ای داخل این پوشه بخواد باز بشه باید یوزر و پسورد وارد بشه!
البته درسته که لاگین مزایای خودشو داره ip میشه بگیری تاریخ هارو میشه ذخیره کنی اخرین ورود و خروج و خیلی چیزای دیگه اما برای امنیتش میپرسم که اون روش امنیتش خوب هست یا نه؟
بله میشه
ولی کاربر برای هر صفحه باید نام کاربری و کلمه عبور را بزنه
از نظر من منطقی نیست
بله درسته
دستتون درد نکنه لطف کردین
استاد من طبق مقاله ای که دادید عمل کردم
محتوای Global.asax.cs به صورت زیر:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; namespace ExampleUrlRouting { public class Global : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("Parameters", "Name/{Name}/", "~/default.aspx"); } protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } protected void Application_BeginRequest(object sender, EventArgs e) { var persianCulture = new GSD.Globalization.PersianCulture(); System.Threading.Thread.CurrentThread.CurrentCulture = persianCulture; System.Threading.Thread.CurrentThread.CurrentUICulture = persianCulture; } protected void Session_Start(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } } }
دقیقا مثل خودتون برای تست توی صفحه default.aspx کد زیر رو قرار دادم:
<fieldset style="width: 300px"> <legend>www.Barnamenevisan.org</legend> <asp:Label ID="Label1" runat="server" Text="پارامتر ارسال شده : "></asp:Label> <asp:Label ID="Label2" runat="server" ForeColor="Red" Text="Label"></asp:Label> </fieldset>
در Page_Load صفحه هم کد زیر رو قرار دادم:
if (Page.RouteData.Values["Name"] != null) { Label2.Text = Page.RouteData.Values["Name"].ToString(); }
کد زیر رو هم که در web.config قرار داده بودم فرمودید منسوخ شده به کلی حذفش کردم:
<system.webServer> <rewrite> <rules> <rule name="RewriteASPX"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="{R:1}.aspx" /> </rule> </rules> </rewrite> </system.webServer>
فایل
قاعدتا باید آدرس زیر رو باز کنه اما باز نمیکنه :
http://localhost:44664/Name/Label
صفحه فقط با آدرس http://localhost:44664/default.aspx باز میشه :(
مشکل از کجاست؟
صفحات با آدرس قبلی در دسترس خواهند بود و کسی از آدرس اونها اطلاع نداره
یعنی چی استاد اصلا متوجه منظورتون نشدم؟
من کلا فقط میخوام aspx رو از آخر آدرس ها حذف کنم!
حذف شده
شما با آدرس جدید صدا بزنید در دسترس خواهد بود
نمیتونید که کلا صفحات را حذف کنید مبحث Rout برای مجازی سازی Url ها هست
خب استاد مگه آدرس جدید الان نباید این باشه:
http://localhost:44664/Name/Label
من میزنم باز نمیکنه!
چه خطایی میده ؟
صفحه رو پیدا نمیکنه!
کد ها درست هست
با نمونه مقاله مقایسه کنید شاید جایی اشتباه کرده باشید
بله استاد درست شد الان باز میشه
اما من گیج شدم درواقع توی نوار آدرس به جای label هر چیزی میزنم باز میشه!
انگار هر پارامتری وارد بشه باز میکنه صفحه رو
چکار کنم که مثلا فقط با پارامتر default باز کنه؟
به شکل زیر قرار دهید فثقط با این ادرس باز میکنه
routes.MapPageRoute("Parameters", "Name/Lable/", "~/default.aspx");
قرار دادم استاد هنوز هم با هر پارامتری که بزنم باز میکنه!
کد را قرار دهید
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; namespace ExampleUrlRouting { public class Global : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("Parameters", "Name/Lable/", "~/default.aspx"); } protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } protected void Session_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } } }
استاد از اون مشکلاتی که بعید میدونم تاحالا برای کسی پیش اومده باشه :))
شما ببینید من کلا کامنت کردم اون بخش رو:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; namespace ExampleUrlRouting { public class Global : System.Web.HttpApplication { //public static void RegisterRoutes(RouteCollection routes) //{ // routes.MapPageRoute("Parameters", "Name/Lable/", "~/default.aspx"); //} protected void Application_Start(object sender, EventArgs e) { //RegisterRoutes(RouteTable.Routes); } protected void Session_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } } }
با این حال داره با تمام پارامتر ها باز میکنه ....
یکبار روی Solution کلیک راست کنید و Clean را بزنید و بعد rebuild
گزینه Clean نبود فقط گزینه Rebuild Solution بود زدم به این صورت:
ای وای این چرا WebSite ؟
چرا WebApplication نیست ؟
سن من به این نوع پروزه قد نمیده
خیلی وقته از این نوع پروزه ها استفاده نکردم یادم رفته
یا خدا نکنه تمام مشکلات درج تاریخ و این آدرس دهی و لاگین و خلاصه همش مال همینه
من تابحال اصلا WebApplication باز نکردما استاد هرچی سایت هم نوشتم با WebSite بوده
فرقشون چیه این دوتا؟
الان من WebApplication باز کنم کار باهاش یا اینکه طریقه کدنویسی و اینا تفاوت داره یا مثل همینه؟
هنگ کردم با این حرفتون!
پروژه Web Site در ASP.Net
در این حالت هر صفحه برای خودش به صورت جداگانه کامپایل میشه و در آخر برای هر فایل ممکن است چندین DLL وابسته داشته باشید. حتی ممکنه یک DLL ثابت شامل کلاس های اصلی پروژه رو برای هر فایل ایجاد کنه که در نهایت باعث کلی خطا میشه. به خاطر اینکه این نوع پروژه چندان مناسب برنامه نویس ها نبود بعد از ارائه در Visual Studio 2005 کم کم کنار گذاشته شد.
البته در صورتی که قصد دارید که یک پوشه رو به عنوان یک پروژه مستقل باز کنید این گزینه برای شما مناسب تره. در صورتی هم که قصد دارید به هر صفحه به صورت مستقل از کل سایت برخورد بشه و هر صفحه مستقلاً کامپایل بشه این گزینه برای شما مناسب است.
پروژه Web Application در ASP.Net
این نوع پروژه اول به صورت Addon به VS اضافه شد بود و حالا به خاطر مزایاش به بخشی از VS تبدیل شده. تفاوت اصلی Web Application با Web Site در ویژال استودیو اینه که Web Application در هنگام کامپایل به یک فایل DLL یکپارچه شامل تمام توابع و اجزای سایت تبدیل میشه. این کار خطایابی رو راحت و پیگیری تغییرات در پروژه رو منظم تر میکنه.
در صورتی که شما پروژه بزرگی شامل چند زیرمجموعه(پروژه child) دارید این گزینه برای شما مناسب است. همینطور برای تبدیل پروژه های تحت وب نسخه های قدیمی VS به نسخه 2005 و بالاتر باید از Web Application استفاده کنید.
خب استاد من الان WebApplication باز کردم داخلش add new item اصلا webform نداره چطوری باید بسازم؟
عذر میخوام اشتباه از من بود WPFApplication باز کرده بودم
مگه میشه مگه داریم ؟
در 2013
بله درسته الان فقط با آدرس http://localhost:2210/name/lable باز میشه
اما من کد رو الان به این صورت تغییر دادم:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; namespace WebApplication1 { public class Global : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("Parameters", "Name/Lable/", "~/default.aspx"); routes.MapPageRoute("Parameters", "Name/Lable2/", "~/WebForm1.aspx"); } protected void Application_Start(object sender, EventArgs e) { RegisterRoutes(RouteTable.Routes); } } }
مگه نباید الان آدرس http://localhost:2210/name/lable2 صفحه WebForm1.aspx رو باز کنه؟ اما باز نمیکنه چرا؟
نام ها نباید یکسان باشه
routes.MapPageRoute("Parameters", "Name/Lable/", "~/default.aspx"); routes.MapPageRoute("Parameters2", "Name/Lable2/", "~/WebForm1.aspx");
خیلی خیلی خیلی ممنونم
فقط یک سوال دیگه اینکه نمیشه Name رو عوض کرد؟ مثلا آدرس به این صورت بشه http://localhost:2210/groups/lable
کد رو به این صورت کردم
public static void RegisterRoutes(RouteCollection routes) { routes.MapPageRoute("Parameters", "Group/Lable/", "~/default.aspx"); routes.MapPageRoute("Parameters2", "Name/Lable2/", "~/WebForm1.aspx"); }
اما باز هم url به این صورت فقط باز میشه http://localhost:2210/name/lable
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)