PDA

View Full Version : چگونه ip کاربران ذخیره کنیم



bitcob589
شنبه 11 مرداد 1393, 14:15 عصر
با سلام
در برنامه خود تعدادی view دارم که یکسری از view ها از یک Layout ارث بری می کنند چگونه می توان کدی نوشت که ویوهای که از Layout ارث بری می کنند ip کاربر در دیتابیس ذخیره شود
چگونه می توان چنین کاری انجام داد

bitcob589
یک شنبه 12 مرداد 1393, 12:12 عصر
در نظر دارم کدی بنویسیم که کاربر در هر کدام از view ها بود بتوان
ip کاربر در دیتابیس ذخیره کرد

لطفا راهنمایی بفرمایید:متفکر:

hakim22
یک شنبه 12 مرداد 1393, 12:28 عصر
برای بدست آوردن Ip کاربر می توانید از دستور زیر استفاده کنید :


HttpContext.Request.UserHostAddress


برای اینکه در Viewهای مختلف مقدار آن را بدست آورید بهترین راه ساختن یک ActionFilterAttribute است. مثلا با نام LogUserIpAttribute یک اشکن فیلتر میسازید و این اتریبیوت را روی هر ActionResult که می خواهید قرار دهید.

می توانید در Layout هم کدی قرار دهید که مثلا IP کاربر را در دیتابیس ذخیره کنید. اما این روش اصل MVC را برهم میزند و چندان مطلوب نیست.

bitcob589
یک شنبه 12 مرداد 1393, 12:41 عصر
داخل همان
ActionFilter آی پی کاربر در دیتابیس ذخیرهشود

اگر در ActionFilter آی پی کاربر در زمان ذخیره در دیتابیس دچار خطا شود برنامه دچار خطا خواهد شد؟

hakim22
یک شنبه 12 مرداد 1393, 13:09 عصر
شما میتوانید مدیریت خطا نیز درون ActionFilter داشته باشید. مثلا اگر IP الزامی است یا IP باید از ایران باشد کاربر را به صفحه ی خطای مربوطه هدایت کنید. یا اگر IP به هر دلیلی وجود ندارد null بودن آن را بررسی کنید تا از خطا جلوگیری کنید. میتوانید با استفاده GlobalFilters این فیلتر را در سرتاسر پروژه اعمال کنید. همچنین می توانید با شرطهایی بررسی کنید و مطمئن شوید که فقط روی View و نه روی PartialView و ChildAction ها اجرا شود.

اکشن فیلتر هم یک کلاس است و متدهای خودش را دارد که شما میتوانید Override کنید و هر کاری درون آن میتوانید انجام دهید. البته اگر از Ninject و IoC ها برای چند لایه کردن پروژه استفاده می کنید و بانک اطلاعاتی در لایه ی دیگری است باید مطابق آن تنظیمات لازم را اعمال کنید.

bitcob589
یک شنبه 12 مرداد 1393, 13:16 عصر
با استفاده GlobalFilters این فیلتر را در سرتاسر پروژه اعمال کنید
چگونه از
GlobalFilters استفاده کنم و در کجا وجود دارد

hakim22
یک شنبه 12 مرداد 1393, 14:42 عصر
در glabal.asax به دنبال متد زیر بگردید :


FilterConfig.RegisterGlobalFilters(GlobalFilters.F ilters);


در فولدر App_Start در فایل FilterConfig قرار دارد.

bitcob589
دوشنبه 13 مرداد 1393, 13:57 عصر
همچنین می توانید با شرطهایی بررسی کنید و مطمئن شوید که فقط روی View و نه روی PartialView و ChildAction ها اجرا شود.
چگونه می توان شرطی بنویسیم که
فقط روی View و نه روی PartialView و ChildAction ها اجرا شود.