HttpClient به عنوان جایگزینی برای HttpWebRequest API قدیمی، به همراه NET 4.5. ارائه شد و هدف آن یکپارچه کردن پیاده سازیهای متفاوت موجود به همراه ارائه راهحلی چندسکویی است که از WPF/UWP ، ASP.NET تا NET Core. و iOS/Android را نیز پشتیبانی میکند. تمام قابلیتهای جدید پروتکل HTTP مانند HTTP/2 نیز از این پس تنها به همراه این API ارائه میشوند.
در مطلب « روش استفادهی صحیح از HttpClient در برنامههای دات نت » با روش استفادهی تک وه ...
اگر در کدهای خود قطعه کد ذیل را دارید: using(var client = new HttpClient())
{
// do something with http client
}
استفادهی از using در اینجا، نهتنها غیرضروری و اشتباه است، بلکه سبب از کار افتادن زود هنگام برنامهی شما با صدور استثنای ذیل خواهد شد: Unable to connect to the remote server
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permit ...
ConcurrentDictionary، ساختار دادهای است که امکان افزودن، دریافت و حذف عناصری را به آن به صورت thread-safe میسر میکند. اگر در برنامهای نیاز به کار با یک دیکشنری توسط چندین thread وجود داشته باشد، ConcurrentDictionary راهحل مناسبی برای آن است.
اکثر متدهای این کلاس thread-safe طراحی شدهاند؛ اما با یک استثناء: متد GetOrAdd آن thread-safe نیست: TValue GetOrAdd(TKey key, Func<TKey, TValue> valueFactory); بررسی نح ...
اگر برنامه نویس NET. باشید، پس از مدتی کار با LINQ، در سایر زبانهای دیگر نیز به دنبال این قابلیت فوق العادهی functional یا تابعی خواهید گشت. در این مطلب، خلاصهای از متدهای توکار جاوا اسکریپت را که میتوانند معادلهایی برای متدهای LINQ to Objects دات نت باشند، بررسی خواهیم کرد.
تدارک ساختار ابتدایی این مطلب
در اینجا اینترفیسی را که بیانگر ساختار شیء شخص است، به صورت ذیل ایجاد میکنیم: export interface Person ...
تا پیش از ارائهی کامپایلر TypeScript 2.0، مقادیر null و undefined، به هر نوعی قابل انتساب بودند و امکان تفکیک آنها وجود نداشت که این مورد میتواند منشاء بروز بسیاری از خطاهای در زمان اجرا شود. let name: string;
name = "Vahid"; // OK
name = null; // OK
name = undefined; // OK let age: number;
age = 24; // OK
age = null; // OK
age = undefined; // OK
برای نمونه در اینجا یک متغیر رشتهای و همچنین عددی تعریف شده ...
یکی از اهداف مهم استفادهی از TypeScript، یافتن خطاهای متداول کدهای جاواسکریپتی، پیش از اجرای آنها در مرورگر است. برای مثال، قطعه کد زیر: defaultChecks() {
const author = { firstName: "Vahid", lastName: "N" };
console.log(author.lastname);
author.lastName.trimStart();
author.firstName.charCodeAt("1");
}
دارای سه مشکل است که سریعا توسط TypeScript شناسایی میشود:
- خاصیت lastname در ...
پس از تکمیل کنترل دسترسیها به قسمتهای مختلف برنامه بر اساس نقشهای انتسابی به کاربر وارد شدهی به سیستم، اکنون نوبت به کار با سرور و دریافت اطلاعات از کنترلرهای محافظت شدهی آن است. افزودن کامپوننت دسترسی به منابع محافظت شده، به ماژول Dashboard
در اینجا قصد داریم صفحهای را به برنامه اضافه کنیم تا در آن بتوان اطلاعات کنترلرهای محافظت شدهی سمت سرور، مانند MyProtectedAdminApiController (تنها قابل دسترسی ...
در قسمت سوم ، کار ورود به سیستم و امکان مشاهدهی صفحهی محافظت شدهی پس از لاگین را پیاده سازی کردیم. در این قسمت میخواهیم امکان دسترسی به مسیر http://localhost:4200/protectedPage را کنترل کنیم. تا اینجا اگر کاربر بدون لاگین کردن نیز این مسیر را درخواست کند، میتواند حداقل ساختار ابتدایی آنرا مشاهده کند که باید مدیریت شود و این مدیریت دسترسی میتواند بر اساس وضعیت لاگین کاربر و همچنین نقشهای او در سیستم باشد:
...
در قسمت قبل ، عملیات ورود به سیستم و خروج از آنرا تکمیل کردیم. پس از ورود شخص به سیستم، هربار انقضای توکن دسترسی او، سبب خواهد شد تا وقفهای در کار جاری کاربر، جهت لاگین مجدد صورت گیرد. برای این منظور، قسمتی از مطالب « اعتبارسنجی مبتنی بر JWT در ASP.NET Core 2.0 بدون استفاده از سیستم Identity » و یا « پیاده سازی JSON Web Token با ASP.NET Web API 2.x » به تولید refresh_token در سمت سرور اختصاص دارد که از نتیجهی آن در اینجا استفاده خ ...
پس از ایجاد AuthService در قسمت قبل ، اکنون میخواهیم از آن برای تکمیل صفحهی ورود به سیستم و همچنین تغییر منوی بالای برنامه یا همان کامپوننت header استفاده کنیم.
ایجاد ماژول Dashboard و تعریف کامپوننت صفحهی محافظت شده
قصد داریم پس از لاگین موفق، کاربر را به یک صفحهی محافظت شده هدایت کنیم. به همین جهت ماژول جدید Dashboard را به همراه کامپوننت یاد شده، به برنامه اضافه میکنیم: >ng g m Dashboard -m app.modu ...