Here’s a summary of what’s new in this preview release:
Servers & middleware
Antiforgery middleware
API authoring
Antiforgery integration for minimal APIs
Native AOT
Request Delegate Generator supports interceptors feature
Full TrimMode is used for web projects compiled with trimming enabled
WebApplication.CreateEmptyBuilder
Blazor
Antiforgery integration
Server-side form handling improvements
Auto render mode
Register root-level cascading values
Improved integration of interactive components with server-side rendering
New EmptyContent parameter for Virtualize
Identity
New bearer token authentication handler
New API endpoints
Single page apps (SPA)
New Visual Studio templates
آموزش فایرباگ - #1
این ابزار امکانات و قابلیتهای فراوانی دارد که فراگیری آنها برای یک توسعه گر یا طراح وب سایت ضروری به نظر میرسد .
در سری مقالات آموزش فایرباگ ، با این ابزار محبوب و پرکاربرد بیشتر آشنا میشویم .
نصب و اجرای فایرباگ :
ابتدا وارد این صفحه شوید و ورژن مناسب مرورگرتان را نصب نمایید .
پس از نصب و دوباره باز کردن مرورگر ، میتوانید با کلیک کردن بروی آیکون فایرباگ یا فشردن کلید F12 ، فایرباگ را اجرا کنید .
تبها :
فایرباگ در حالت پیشفرض دارای 6 تب میباشد .
- Console : در این تب دو بخش وجود دارد :
در بخش Log هشدارها ، پیغامها ، درخواستهای XHR و ... نمایش داده میشوند .
بخش دیگر هم که در سمت راست قرار دارد ، مخصوص اجرای کدهای جاوا اسکریپت میباشد .
-
HTML : در این تب HTML صفحه را بصورت درختی و بصورت Live مشاهده میکنید .
Live بودن به این معنی است دقیقا چیزی را مشاهده میکنید که مرورگر در حال تفسیر هست و نه چیزی که به مرورگر ارسال شده .
همچنین در این تب میتوانید محتوای HTML قسمت Body صفحه را ویرایش کنید .
- CSS : در این تب میتوانید تعاریف CSS موجود در صفحه را مشاهده/ویرایش/حذف/فعال-غیرفعال نمایید .
همچنین میتوانید تمام فایلهای استایلی که به صفحه اضافه شده اند را مشاهده و تعیین کنید که تعاریف موجود در کدام فایلها در این محیط نمایش داده بشوند .
- Script : در این تب میتوانید به خطایابی کدهای جاوا اسکریپت بپردازید . همچنین مانند تب CSS میتوانید یکی از فایلهای اضافه شده به صفحه برای نمایش در این بخش ، چند مورد را انتخاب کنید .
- DOM : در این تب میتوانید ساختار DOM صفحه جاری را مشاهده نمایید .
- Net : در این تب میتوانید درخواست هایی که از صفحه ارسال میشوند را زیر نظر بگیرید .
این تب اطلاعات کاملی دربارهی هر درخواست ارائه میکند .
از جمله : نوع درخواست ( Post/Get ) ، حجم درخواست و پاسخ ، مدت زمان درخواست ، تعداد درخواستهای ارسال شده ، وضعیت درخواستها و ...
در قسمتهای بعدی هر تب را به صورت جداگانه بررسی میکنیم .
- Fixed known issue: The debugger's worker process (msvsmon.exe) unexpectedly exited. Debugging will be aborted.
- Fixed known issue: VS 2019 crashes when debugging async code.
- Fixed known issue: Xamarin problem following update to VS2019 16.1.
- Fixed known issue: [Xcode11] [Simulator] Updating to Xcode 11 stops the simulator from launching.
- Improved the reliability of Visual Studio by fixing an intermittent issue that happens when opening solutions.
- Fixed a crash with the search functionality in locals / autos / watch windows when the IDE is not in break mode.
فناوریهایی برای مطالعه در سال 2017
- .NET Core
- Node.js
- Docker
- Elasticsearch: A distributed and open source search engine based on Lucene. A blazing fast NoSQL database with replication capabilities, it is the most widely known component of the ELK stack, together with Kibana (for reporting and visualizations), Logstash (for data import) and Beats (for data shipping). Even Azure Search uses it behind the covers. Free but some tools are paid. Get it from http://elastic.co.
- ECMAScript 2015
- HTML5
- Kafka
- TypeScript
- MongoDB
- Git
- Nginx
- Octopus Deploy
- Azure
- Amazon Web Services
- Linux
- Visual Studio Code
- Xamarin
- Google Analytics
- SQL Server 2016
- Let’s Encrypt
- TensorFlow
- GitLab
- Redis
dotnet new webapi -o SampleApi
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.3" /> <PackageReference Include="Microsoft.AspNetCore.OData" Version="7.4.0" />
using Microsoft.AspNet.OData.Extensions;
services.AddControllers().AddNewtonsoftJson(); // Add .AddNewtonsoftJson() to services.AddControllers(); services.AddOData(); // add this new line
app.UseEndpoints(endpoints => // Existing code { endpoints.MapControllers(); // Existing code endpoints.EnableDependencyInjection(); // Add this new line endpoints.Select().Expand().Filter().OrderBy().Count().MaxTop(20); // Add this new line });
// replace: [HttpGet] // Existing code // with: [HttpGet, EnableQuery] // new code
public class Customer { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public Gender Gender { get; set; } public AddressInfo Address { get; set; } } public class AddressInfo { public int StreetNo { get; set; } public string PostalCode { get; set; } } public enum Gender { Man, Woman, Other }
?$filter=Gender eq 'Woman'
?$filter=Gender eq 'Woman'&$orderby=Address/StreetNo
?$filter=contains(FirstName,'Ali')
دوره آموزشی چهار ساعته Blazor Hybrid
Learn Blazor Hybrid - Full Course for Beginners | Build cross-platform apps in C#
Let's start our journey together to build beautiful native cross-platform apps for iOS, Android, macOS, and Windows with Blazor Hybrid, .NET MAUI, C#, and Visual Studio! In this full workshop, I will walk you through everything you need to know about .NET MAUI and building your very first app. You will learn the basics including how to build user interfaces with Razor, how to show data from the internet, how to navigate between pages and combine .NET MAUI pages with Razor pages, access platform features like geolocation, and theme your app for light theme and dark theme. This course has everything you need to learn the basics and set you up for success when building apps with Blazor Hybrid!
Chapters:
00:00:00 - Intro to the Blazor Hybrid Workshop
00:04:28 - What is Blazor Hybrid & How to Install
00:06:51 - First Blazor Hybrid App & Architecture
00:21:40 - Get Code to Build Your First Blazor Hybrid App
00:26:38 - Blazor Hybrid Project Walkthrough
00:39:22 - Start to Build First Blazor Hybrid App
01:03:10 - Event Handling, Data Binding and Parameters (Slides)
01:09:00 - Add Monkey Data & Fluent UI Blazor Components
01:32:08 - Navigation, NavigationManager, .NET MAUI Pages (Slides)
01:39:19 - Navigation with NavigationManager
01:52:39 - Navigation with NavLinks
01:57:21 - Add .NET MAUI Pages & Components
02:21:11 - Access Platform Functionality (Slides)
02:27:57 - Check Network Connectivity
02:38:04 - Get User Location with Geolocation
02:49:09 - Integration with Other Apps
02:57:42 - App Theming, Light Theme, Dark Theme (Slides)
03:05:36 - JavaScript Interoperability with IJSRuntime
03:20:48 - Theming FluentUI Blazor Components
03:26:05 - Style Status Bar with .NET MAUI Community Toolkit
03:39:00 - .NET MAUI Light & Dark Theme with AppThemeBinding
03:42:58 - Sharing State & Creating Reusable Components (Slides)
03:47:27 - Implement Shared State Blazor Hybrid & .NET MAUI
04:02:47 - Create Reusable Razor Components
04:08:31 - CONGRATULATIONS!
Install-Package Microsoft.AspNetCore.Mvc.Versioning
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddApiVersioning(); // ... }
services.AddApiVersioning(opt => { opt.AssumeDefaultVersionWhenUnspecified = true; opt.DefaultApiVersion = new ApiVersion(1, 0); });
- api/foo?api-version=1.0/
opt.DefaultApiVersion = new ApiVersion(new DateTime(2018, 10, 22));
- api/foo?api-version=2018-10-22/
URL Path Segment Versioning
[Route("api/v{version:apiVersion}/[controller]")] public class FooController : ControllerBase { public ActionResult<IEnumerable<string>> Get() { return new[] { "value1", "value2" }; } }
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddApiVersioning(opt => opt.ApiVersionReader = new HeaderApiVersionReader("api-version")); }
Deprecating
[ApiVersion("2")] [ApiVersion("1", Deprecated = true)] [Route("api/v{version:apiVersion}/[controller]")] public class FooController : ControllerBase { [HttpGet] public string Get() => "I'm deprecated, Bye bye :("; [HttpGet, MapToApiVersion("2.0")] public string GetV2() => "Hello world ! :D"; }
services.AddApiVersioning(opt => { opt.DefaultApiVersion = new ApiVersion(1, 0); opt.AssumeDefaultVersionWhenUnspecified = true; opt.ReportApiVersions = true; });
Ignoring Versioning
[ApiVersionNeutral] [Route("api/[controller]")] public class BarController : ControllerBase { public string Get() => HttpContext.GetRequestedApiVersion().ToString(); }
مطلب تکمیلی:
namespace TestVersioning.Controllers.V1 { [ApiVersion("1", Deprecated = true)] [Route("api/v{version:apiVersion}/[controller]")] public class FooController : ControllerBase { public string Get() => "I'm deprecated, Bye bye :("; } } namespace TestVersioning.Controllers.V2 { [ApiVersion("2")] [Route("api/v{version:apiVersion}/[controller]")] public class FooController : ControllerBase { public string GetV2() => "Hello world ! :D"; } }
خلاصه اشتراکهای روز جمعه 4 آذر 1390
PM> Install-Package Twitter.Bootstrap.Less
.loud { color: red; } // Make all H1 elements loud h1 { .loud; }
<div class="container"> <div class="row"> <div class="col-md-8"> Content - Main </div> <div class="col-md-4"> Content - Secondary </div> </div> </div>
<div class="wrapper"> <div class="content-main"> Content - Main </div> <div class="content-secondary"> Content - Secondary </div> </div>
// Core variables and mixins @import "variables.less"; @import "mixins.less"; .wrapper { .make-row(); } .content-main { .make-lg-column(8); } .content-secondary { .make-lg-column(3); .make-lg-column-offset(1); }
.wrapper { margin-left: -15px; margin-right: -15px; } .content-main { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px; } @media (min-width: 1200px) { .content-main { float: left; width: 66.66666666666666%; } } .content-secondary { position: relative; min-height: 1px; padding-left: 15px; padding-right: 15px; } @media (min-width: 1200px) { .content-secondary { float: left; width: 25%; } } @media (min-width: 1200px) { .content-secondary { margin-left: 8.333333333333332%; } }
<!-- Before --> <a href="#" class="btn danger large">Click me!</a> <!-- After --> <a href="#" class="annoying">Click me!</a> a.annoying { .btn; .btn-danger; .btn-large; }