نظرات مطالب
سفارشی سازی ASP.NET Core Identity - قسمت پنجم - سیاست‌های دسترسی پویا
در حالت خاصی که در ادامه توضیح داده خواهد شد ممکن است بعضی از کنترلرها در لیست ظاهر نشوند، همانطور که در این کامنت به آن اشاره شده است.
ابتدا حالتی که باعث می‌شود بعضی از کنترلرهای شما در فرم مربوط به دسترسی‌های پویا ظاهرا نشود را توضیح و سپس راه حلی که باعث حل آن می‌شود را در ادامه خواهید خواند.
دو Area جدید به اسم‌های One , Two اضافه شدند که هر کدام شامل یک کنترلر به اسم Home  هستند (داخل هر کنترلر هم یک اکشن متد به نام Index وجود دارد )
    [Authorize(Policy = ConstantPolicies.DynamicPermission)]
    [Area("One")]
    [DisplayName("home")]
    public class HomeController : Controller
    {
        [DisplayName("ایندکس")]
        public IActionResult Index()
        {
            return View();
        }
    }

و مشابه همین برای Area دوم :
[Authorize(Policy = ConstantPolicies.DynamicPermission)]
    [Area("Two")]
    [DisplayName("home2")]
    public class HomeController : Controller
    {
        [DisplayName("ایندکس")]
        public IActionResult Index()
        {
            return View();
        }
    }
خروجی نمایش داده شده در صفحه مربوطه به دسترسی‌ها به صورت زیر می‌باشد که فقط یکی از این دو کنترلر در خروجی نمایش داده می‌شود:


بعد از بررسی کدهای مربوط به GetAllSecuredControllerActionsWithPolicy  متوجه شدم زمانی که دو کنترلر هم نام پشت سر هم قرار گرفته باشند،  کنترلر دوم بخاطر شرط زیر نادیده گرفته می‌شود:
 if (!lastControllerName.Equals(descriptor.ControllerName, StringComparison.Ordinal))
{
}
با فرض اینکه اول کنترلر مربوط به Area One اجرا شود، مقدار آن در متغییر lastConrolerName قرار میگیرد، در اجرای بعدی foreach چون کنترلر بعدی به همان اسم می‌باشد از اجرا این شرط صرف نظر میکند.
برای حل این مورد، namespace هر  کنترلر را برای منحصر بفرد کردن کنترلرها دخیل کردم:
   lastControllerName = $"{descriptor.ControllerTypeInfo.Namespace}{descriptor.ControllerName}";
و در دستور if هم به همین صورت عمل کردم :
       var controllerName = $"{descriptor.ControllerTypeInfo.Namespace}{descriptor.ControllerName}";
        if (!lastControllerName.Equals(controllerName, StringComparison.Ordinal))

* اگر هردو کنترلر‌های Home مربوط به area‌های one,two بعد از کنترلری به اسم Home باشند، در حالت عادی هیچ کدام از این کنترلرها در خروجی ظاهرا نخواهند شد، این مورد دقیقا مشکلی بود در پروژه جاری ام با آن برخورد کردم.
نظرات مطالب
اعتبارسنجی مبتنی بر JWT در ASP.NET Core 2.0 بدون استفاده از سیستم Identity
سلام؛ چطور می‌تونیم بعد از این که login با موفقیت انجام شد یک action رو صدا بزنیم که مثلا صفحه home رو نشون بده. در واقع بعد از اینکه token رو بعد از login بدست آوردم می‌خوام یه action رو با jwt toke صدا بزنم که بره اون صفحه رو load کنه. راهی مثل :window.location در javascript یا a href در html که بشه باهاش token رو فرستاد برای باز کردن action Authorize  شده. ممنون.
نظرات مطالب
نوشتن TagHelperهای سفارشی برای ASP.NET Core
من در حین ایجاد tag helper سفارشی برای منو‌ها به مشکلی برخوردم
برای ایجاد لینک‌های صفحه از url.Action  به صورت زیر استفاده میکنم: 
  Menu.ChildsList.Add(new ChildMenu()
                {
                    Text = "داشبورد",
                    Url = url.Action(new UrlActionContext() { Action = "Index", Controller = "Home"})
                });
 اما در کلاس UrlActionContext پارامتری برای مشخص کردن Area وجود نداره! 
نظرات مطالب
Url Routing در ASP.Net WebForms
سلام
ممنون از مطلب کاملتون ، من کامل انجام دادم فقط یه مشکل دارم . وقتی تو صفحه نمایش خبر هستم رو هر لینکی کلیک میکنم باز تو همون صفحه میمونه و فقط اسم لینک به انتهای url اضافه میشه
 این صفحه خبره  /NewsPage/6/news1/   بعد که میخوام برم صفحه اصلی اینجوری میشه /NewsPage/6/Home/   
ممنون میشم راهنمایی کنین
نظرات مطالب
T4MVC : یکی از الزامات مدیریت پروژه‌های ASP.NET MVC
با سلام
T4MVC یکسری تغییرات در برنامه ما ایجاد می‌کنه از جمله مثلا یک کانستراکتور برای کنترلر Home  اضافه می‌کنه و من چگونه باید کدی مثل کد زیر رو داخل کنترل ام بنویسیم که خطای تکراری نگیره؟
private readonly ICacheService _cacheService;
public HomeController() : this(MvcApplication.CacheService)
{            
}
public HomeController(ICacheService cacheService)
{
      _cacheService = cacheService;
}
نظرات مطالب
ASP.NET MVC #23
- .* نیست. داخل پرانتر نوشتم. درستش *. است.
- اگر از متدهای توکار خود ASP.NET MVC برای تولید لینک‌ها استفاده کنید، این لینک‌ها صرفا بر مبنای اطلاعات مسیریابی تعریف شده تولید می‌شوند.
- باید به application pool برنامه مراجعه کنید.
- روی 2003 خیر. پس از آن به صورت پیش فرض وجود دارد.
- مراجعه کنید به application pool برنامه. احتمالا روی دات نت 2 است؛ بجای 4.
توضیحات بیشتر در اینجا
- یک اکشن متد ساده برای صفحه‌ی Home طراحی کنید.
نظرات مطالب
ASP.NET MVC #18
آقای نصیری سپاس.
مشکل حل شد, توضیح بدم اگر کسی مشکل من رو داشت دیگه نپرسه!
لینکی که دادید رو قبلا خوانده بودم ولی دقت نکردم در انتها ذکر کرده بودید تعریف فیلترهای سراسری
این کد رو متد Application_Start فایل Global.asax.cs اضافه کردم:
GlobalFilters.Filters.Add(new System.Web.Mvc.AuthorizeAttribute());
در همه جا اگر فرد لاگین کره بود می‌تونه دسترسی داشته باشه.
بعد در صفحه Home هم [AllowAnonymous] رو  در ابتدا اضافه کردم تا بدون در نظر گرفتن لاگین اجازه دسترسی رو بده.
نظرات مطالب
ASP.NET MVC #18
سلام؛بنده هم همین مشکل رو دارم.
برای اینکه قسمت‌های مختلف که شما مطمئنا از ان اگاه نیستید و شاید بران تاثیر بگذاره رو نداشته باشید.
یک پروژه تازه رو باز کردم یک راست رفتم سراغ web.config این کد رو در قسمت system.web وارد کردم  
<authorization>
     <deny users="?" />
</authorization>
بعد بلافاصله یک کنترلر به نام Home ایجاد کردم و یک view برای index اد کردم...
قبل از اکشن index  هم  [AllowAnonymous] رو قرار دادم
ولی بعد از اجرا هنوز هم دسترسی ندارم ...
Access is denied.  

آیا دلیل و نکته است که رعایت نکرده ام؟
نظرات مطالب
بهبود SEO در ASP.NET MVC
سلام
روش دوم تولید Urlهای lower case 
در پاسخ شما قسمت تبدیل آدرس به حروف کوچک
<action type="Rewrite" url="_{ToLower:{R:1}}" />
این روش در تبدیلات مطابق نیاز من درست کار نکرد. به فرض مثال در روش بالا اگر آدرسی مانند www.mysite.com/Home داشته باشیم تبدیل به آدرسی مانند www.mysite.com/_home خواهد شد. یک _ اضافه دارد.
نظرات مطالب
بهبود SEO در ASP.NET MVC
جالبه که من این فیلتر اعمال کردم
<link rel="canonical" href="http://mysite.ir/home/index/5/صفحه-اصلی" />
بعد از فراخوانی سایت بدون www سایت ریدایرکت نمیشه اما وقتی کد خروجی سایت بررسی می‌کنیم می‌بینم مثل بالا قسمت cononical اعمال شده، مشکل ممکنه از کجا باشه؟ در حالی که کد درست اجرا میشه اما ریدایرکت رخ نمی‌ده - این بحث چطور بررسی کنم؟