در C# 7.2، جهت بهبود خوانایی، جداکنندهی ارقام را درست پس از پیشوندهای 0b و 0x نیز میتوان قرار داد:
class ClassCS72 { const int intLiteral = 100_000; const int binaryLiteral = 0b_0101_0101; const int hexLiteral = 0x_FF_FF; }
class ClassCS72 { const int intLiteral = 100_000; const int binaryLiteral = 0b_0101_0101; const int hexLiteral = 0x_FF_FF; }
- برای اینکه مشاهده کنید این فیلتر کار میکند یا نه، باید به برگهی network مرورگر مراجعه کنید و status code نمایش مجدد صفحه را مشاهده کنید:
اثر دکمهی back برای صفحهی لاگینی که کش مرورگر آن توسط فیلتر فوق غیرفعال شده (دریافت مجدد از سرور؛ بجای خوانده شدن از کش مرورگر).
اثر دکمهی back برای یک صفحهی معمولی (از کش مرورگر خوانده شده؛ بجای دریافت مجدد از سرور).
- ضمن اینکه تعریف این فیلتر صرفا برای صفحهی login توصیه میشود و نه جای دیگری و نه کل سایت. گیرم شخصی با دکمهی back، محتوای کش شدهی قبلی را مشاهده کند. مهم نیست. چون بلافاصله با ارسال یک درخواست جدید، فیلتر Authorize، دسترسی او را سد میکند. صفحهی کش شده هم بر اساس دسترسی پیشین او در کش مرورگر وجود دارد. مشاهدهی آن صفحهی قدیمی اهمیتی ندارد؛ چون اطلاعات بعدی به روز شده را باید با گذشت از فیلتر Authorize دریافت کند.
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Primitives; using Microsoft.Net.Http.Headers; namespace ASPNETCoreIdentitySample.Common.WebToolkit { public class NoBrowserCacheAttribute : ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.DisableBrowserCache(); base.OnResultExecuting(filterContext); } } public static class CacheManager { public static void DisableBrowserCache(this HttpContext httpContext) { // Note: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/middleware // The Antiforgery system for generating secure tokens to prevent Cross-Site Request Forgery (CSRF) // attacks sets the Cache-Control and Pragma headers to no-cache so that responses aren't cached. // More info: // https://github.com/aspnet/Antiforgery/blob/dev/src/Microsoft.AspNetCore.Antiforgery/Internal/DefaultAntiforgery.cs#L381 // https://github.com/aspnet/Antiforgery/issues/116 // So ... the following settings won't work for the pages with normal forms with default settings. httpContext.Response.Headers[HeaderNames.CacheControl] = new StringValues(new[] { "no-cache", "max-age=0", "must-revalidate", "no-store" }); httpContext.Response.Headers[HeaderNames.Expires] = "-1"; httpContext.Response.Headers[HeaderNames.Pragma] = "no-cache"; } } }
export class MovieComponent { @Input() movie: Movie; }
Error! Property movie has no initializer and is not assigned directly in the constructor.
@Input() movie: Movie | null = null;
class C { baz: boolean | undefined; }
class C { bar = "hello"; }
class C { foo!: number; ngOnInit() { this.foo = 0; } }