‫۱ سال و ۴ ماه قبل، سه‌شنبه ۱۵ فروردین ۱۴۰۲، ساعت ۲۲:۱۵
با سلام؛ زمانیکه ساعت سیستم کاربر با ساعت سیستم سرور مغایرت داشته باشد، مثلا 1 ساعت جلوتر باشد، پس از لاگین، کاربر AccessToken  نال  و خطای 401  بر میگرداند. ممکن است کاربری از این موضوع مطلع نباشد تا ساعت Device خود را تغییر دهد. راه حل این مشکل چیست؟ آیا با ارسال ساعت فعلی کاربر به سرور جهت استفاده در تولید توکن مشکل حل میشود؟ 
‫۱ سال و ۶ ماه قبل، سه‌شنبه ۲ اسفند ۱۴۰۱، ساعت ۰۰:۲۷
سلام؛ آیا باید با تزریق IHttpContextAccessor در لایه سرویس پروژه Wasm اطلاعات مورد نیاز را از قبیل نام کاربری، بدست بیاوریم یا باید اطلاعات کاربری را از لایه UI توسط  AuthenticationStateProvider  استخراج و به لایه سرویس ارسال کنیم؟  
‫۱ سال و ۹ ماه قبل، شنبه ۵ آذر ۱۴۰۱، ساعت ۲۳:۱۳
با سلام؛ پروژه بصورت WASM+Web API رو تغییر دادم و دات نت اون هم به  ورژن 7  ارتقا دادم. در موقع توسعه و محیط VS، برنامه بدون هیچ مشکلی کار میکند ولی بعد از publish و مستقر شدن در IIS خطای زیر صادر میکند.
crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: Arg_NoDefCTor, Wasm.Shared.MainLayout
System.MissingMethodException: Arg_NoDefCTor, Wasm.Shared.MainLayout
   at System.RuntimeType.CreateInstanceMono(Boolean , Boolean )
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean , Boolean )
   at System.Activator.CreateInstance(Type , Boolean , Boolean )
   at System.Activator.CreateInstance(Type , Boolean )
   at System.Activator.CreateInstance(Type )
   at Microsoft.AspNetCore.Components.DefaultComponentActivator.CreateInstance(Type )
   at Microsoft.AspNetCore.Components.ComponentFactory.InstantiateComponent(IServiceProvider , Type )
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.InstantiateComponent(Type )
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.InstantiateChildComponentOnFrame(RenderTreeFrame& , Int32 )
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewComponentFrame(DiffContext& , Int32 )
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InitializeNewSubtree(DiffContext& , Int32 )
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.InsertNewFrame(DiffContext& , Int32 )
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& , Int32 , Int32 , Int32 , Int32 )
   at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.ComputeDiff(Renderer , RenderBatchBuilder , Int32 , ArrayRange`1 , ArrayRange`1 )
   at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder , RenderFragment , Exception& )
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry )
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue() blazor.webassembly.js:1:38555
پس از بررسی متوجه شدم مشکل از CascadingAuthenticationState هست. وقتی فایل App.razor بصورت زیر هست خطا بر طرف میشود.
<Router AppAssembly="@typeof(App).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        <FocusOnNavigate RouteData="@routeData" Selector="h1" />
    </Found>
    <NotFound>
        <PageTitle>Not found</PageTitle>
        <LayoutView Layout="@typeof(MainLayout)">
            <p role="alert">Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>
ولی بصورت زیر بعد از پابلیش خطا صادر میکند.
 <CascadingAuthenticationState>
      <Router AppAssembly="typeof(App).Assembly"  PreferExactMatches="true">
          <Found Context="routeData">
          <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
                    <Authorizing>
                        <FocusOnNavigate RouteData="@routeData" Selector="h1"/>
                    </Authorizing>
                    <NotAuthorized>

                      @*  <RedirectToLogin/>*@


                    </NotAuthorized>
                </AuthorizeRouteView>
            </Found>
            <NotFound>
                <LayoutView Layout="@typeof(MainLayout)">
                      <span>Error</span>
                 </LayoutView>
            </NotFound>
        </Router>
    </CascadingAuthenticationState>
یک نکته‌ی تکمیلی: بلیزر به ازای هرکامپوننتی که دریافت کننده‌ی مقدار آبشاری است، یک نوتیفیکیشن اطلاع رسانی تنظیم میکند. هنگامیکه یک مقدار آبشاری تغییر می‌کند، مقدار جدید به درخت کامپوننت فرستاده می‌شود و تمام اجزایی که از آن استفاده می‌کنند به‌روزرسانی می‌شوند. بنابراین، Blazor باید به طور مداوم در حال چک کردن این مقدار باشد. این کار در یک برنامه‌ی بزرگ می‌تواند کارآیی را کاهش دهد . اگر CascadeVaue پس از اولین مقداردهی، مقادیرش دیگر هرگز تغییر نکند، می‌توانیم این بررسی مداوم را متوقف کنیم؛ بوسیله‌ی پارامتر IsFixed که در  CascadingValue وجود دارد. این پارامتر به طور پیش فرض روی false تنظیم شده است؛ اما اگر روی true تنظیم شود، Blazor بررسی مداوم را انجام نمی‌دهد. یکی از مواردی که IsFixed کاربرد دارد در ارسال خواص مشترک کامپوننتها از سمت  MainLayout  به سایر کامپوننتها میباشد.
<CascadingValue Value="this" IsFixed="true">
  main
</CascadingValue>
‫۱ سال و ۱۰ ماه قبل، دوشنبه ۱۸ مهر ۱۴۰۱، ساعت ۰۵:۳۲
سلام و وقت بخیر؛ موقع اجرا و چاپ، در محیط توسعه با VS فوت فارسی صمیم بخوبی در گزارش جواب میدهد. اما وقتی پروژه پابلیش میکنم و در IIS مستقر میکنم گزارش  فونت پیش فرض را نمایش میدهد. آیا تنظیم خاصی در iis  و یا web.config وجود دارد. تقریبا تمام فونت‌های فارسی را تست کردم ولی جواب نمی‌دهند.
‫۲ سال و ۲ ماه قبل، دوشنبه ۶ تیر ۱۴۰۱، ساعت ۰۰:۱۷
یک نکته‌ی تکمیلی: روش جلوگیری از رندر مجدد کامپوننت‌ها
یکی از مواردی که در Blazor کارآیی را کاهش میدهد، رندر مجدد کامپوننتها بعد از فراخوانی رویدادی میباشد. به صورت پیش‌فرض، و به‌طور خودکار پس از فراخوانی یک رویداد، بلافاصله StateHasChanged کامپوننت فراخوانی می‌شود. در برخی موارد، ممکن است اجرای StateHasChanged غیرضروری باشد. بخصوص برای صفحاتی که تعداد زیادی المنت در آن قرار داشته باشد. این رندر مجدد باعث کاهش سرعت بروزرسانی UI میشود. جهت جلوگیری از اجرای خودکار StateHasChanged میتوانیم اینترفیس   IHandleEvent  را پیاده سازی کنیم که بصورت سراسری بر تمام کامپوننتهای یک صفحه تاثیر بگذارد.
@implements IHandleEvent
@code {
        Task IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, object? arg) => callback.InvokeAsync(arg);
}
 در اینگونه موارد میتوانیم UI را بصورت دستی با فراخوانی StateHasChanged   به‌روز رسانی کنیم.
‫۲ سال و ۲ ماه قبل، یکشنبه ۵ تیر ۱۴۰۱، ساعت ۰۴:۰۷
یک نکته‌ی تکمیلی: چاپ گزارش در WASM با Microsoft RDLC

با توجه به  آموزش‌های قبلی  در زمینه تولید پی دی اف که  در سایت داده شده است از توضیحات اضافی خودداری و بصورت خلاصه نکات تهیه گزارش چاپی با RDLC آورده شده است.
1- دریافت بسته از نیوگت Install-Package ReportViewerCore.NETCore -Version 15.1.16 
2- دریافت Microsoft RDLC Report Designer از Marketplace  چنانچه از قبل دریافت نشده باشد جهت تولید فایل گزارش
3 -اضافه کردن دیتاست DataSet  در پروژه و ایجاد فایل گزارش  Report.rdlcدر مسیر ریشه و تنظیم و طراحی خواص گزارش بر اساس دیتاست طراحی شده.
4-ایجاد کنترولر جهت تولید و چاپ گزارش.
نکته قابل توجه
1- مقدار ReportDataSource   چه در قسمت سربرگ و پابرگ و  محتوا ی ارسالی به گزارش حتما از نوع لیستی باید باشد.FirstOrDefault ,Single باعث بروز استثناء میشود.

 report.DataSources.Add(new ReportDataSource("Header", "از نوع لیست باشد"));

کدهای کامل این مطلب را از اینجا می‌توانید دریافت کنید  :BlazorReportRDLC-077977be954549dab99b73a6802bf3ea.zip

‫۲ سال و ۹ ماه قبل، دوشنبه ۱۷ آبان ۱۴۰۰، ساعت ۰۴:۲۱
سلام و تشکر از شما
 webHostEnvironment . WebRootPath_ در نسخه 6 دات نت نال بر میگرداند 
من از یک Razor Class Library استفاده میکنم که فایهای تصویری در فولدر wwwroot/lib  آن قرار دارد در نسخه 5 دات نت با خط کد زیر مشکلی ندارد و فایلها در web api قابل دسترسی است  ولی در دات نت 6,  PhysicalPath   مقدار نال بر میگرداند آیا به تنظیمات خاصی در  کلاس program نیاز دارد؟
[HttpGet]
[Route("GetImagess")]
public async Task<ActionResult> GetImagess ()
{  
 var rootPath = _webHostEnverioment.WebRootFileProvider.GetDirectoryContents("/_content/CommonComponents").FirstOrDefault(x => x.Name == "lib").PhysicalPath;
....
}

سلام و تشکر از شما
برای نمایش نام مستعار کاربر یا DisplayName که فارسی و ترکیبی از نام و نام خانوادگی است,  DisplayName  را به Claims‌ها اضافه میکنم ولی هنگام لاگین جهت بعضی کاربران خطایی صادر میشود: مثلا کاربر A و نام مستعار محمد استواری
blazor.webassembly.js:1 crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
   at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
   at System.Convert.FromBase64String(String s)
 نکته اینجاست که وقتی پروژه را در سیستم‌های دیگراجرا میکنم لاگین با کاربر A  خطا صادر نمی‌کند و یا احتمال صدور خطا کمتر است ولی با بعضی کاربران دیگر خطا صادر میشود
گویا مشکل با کاراکترهای فارسی هست و با نام مستعار لاتین هیچگونه خطایی صادر نمیشود.