Category Archives: ASP.NET

Optimalizace výkonu [ASP].NET + profiling – záznam, slides a dema [Robert Haken, ShowIT SK 2019]

Záznam z mého vystoupení pro ShowIT Bratislava ze 6. února 2019.

Slides a dema:

Dotčená témata:

  • Premature optimisation
  • <compilation debug=“true“/>
  • Data Structures – List, Sorted Arrray (Binary Search), Dictionary, Hashtable, Lookup
  • String Concatentation vs. StringBuilder (Garbage Collection, Large Object Heap)
  • Visual Studio Diagnostic Tools – CPU Profiling, Memory Usage
  • Profiling – Instrumentation vs. Sampling
  • Visual Studio Performace Profiler
  • ANTS Performance Profiler
  • PerfView
  • Windows Performance Analyzer, Windows Performance Recorder
  • Web Applications Caching
    • Data Caching
    • Output Caching

Nahrávka je publikována na našem HAVIT YouTube Channelu.

Novinky v C# 8.0, Visual Studio 2019 a .NET vNext – záznam, dema a slides [Robert Haken, ShowIT SK 2019]

Záznam z mého vystoupení pro ShowIT Bratislava ze 5. února 2019.

Slides a dema:

Dotčená témata:

  • C# 8.0
    • Indices and Ranges
    • Switch Expressions
    • Pattern Matching
    • Static Local Functions
    • Using Declarations
    • Nullable Reference Types
    • Async Streams
    • Target-typed New
    • Default Interface Methods
    • Null Coalescing Operator ??=
  • C# vNext
    • Records
    • Extension Everything
    • Native-Sized Number Types
  • Visual Studio 2019
    • IntelliCode
    • New UI – Startup, New Project, …
  • .NET Framework 4.8
  • .NET Core 2.2, 3.0
  • Entity Framework 2.2, 3.0
  • ASP.NET Core 2.2, 3.0

Nahrávka je publikována na našem HAVIT YouTube Channelu.

ASP.NET WebForms – Dependency Injection s Castle Windsor [Ondřej Václavek, HAVIT Vzdělávací okénko, 25.1.2019]

Záznam ze Vzdělávacího okénka HAVIT ze 25. ledna 2019, kde Ondra Václavek povídal o našem adaptéru pro použití Castle Windsor containeru s ASP.NET WebForms (s pomocí přímé podpory Dependency Injection, které přinesl .NET Framework 4.7.2).

Popisovanou knihovnu Havit.CastleWindsor.WebForms naleznete zde:

Nahrávka je publikována na našem HAVIT YouTube Channelu.

Microsoft Developer Days Praha 2018 & Azure DevOps Bootcamp – záznamy z přednášek

Dne 12. listopadu 2018 jsme společně s Microsoftem pořádali vývojářskou konferenci Microsoft Developer Days Praha 2018 & Azure DevOps Bootcamp.

Na našem HAVIT YouTube Channelu vám nabízíme záznamy z většiny prezentací.

Microsoft Developer Days Praha 2018 & Azure DevOps Bootcamp – YouTube playlist:

  1. Keynote: Novinky v .NET 4.8, .NET Core 2.2 a 3.0, C# 8.0 a VS2019 [Robert Haken]
  2. Převod aplikací do kontejnerů [Tomáš Herceg]
  3. Diagnostika pádu ASP.NET Core aplikací [Mirek Holec]
  4. Azure DevOps a GitHub při vývoji DotVVM [Tomáš Herceg]
  5. Azure DevOps Services – pohled do kuchyně HAVIT [Jiří Kanda]
  6. Web Apps in Azure [Jan Hájek]

…toť z ročníku 2018 vše. Ostatní záznamy se buď nepodařily technicky, nebo si přednášející nepřál nahrávání. Od některých přednášek bude k dispozici alternativní záznam na webu WUG.cz s „kamerovým okénkem“.

CORS a WebAPI

V rámci solution máme dva webové projekty – Web (javascriptová single-page aplikace) a WebAPI (backend s API). v ASP.NET Core 2.0. Řešili jsme problém, že nám nefungoval spolehlivě CORS – javascriptové requesty z Webu nedostávaly správné odpovědi od WebAPI. Chovalo se to velmi podivně i přesto, že lokálně vše fungovalo, a to i když aplikace běžely na různých portech.

Konkrétně:

  • Některé GET requesty fungovaly i v testovacím prostředí, ale POST, PUT a DELETE requesty nikdy.
  • GET requesty browser někdy zdvojoval (zejména v Safari na Macu), první vždy prošel (status code 200) a druhý neprošel (status code 403)
  • V Developer tools v Chrome, ani v Safari nejsou vidět autorizační hlavičky i přesto, že uživatel je přihlášený (při odchycení requestu Fiddlerem tam skutečně jsou). Ovšem na localhostu jsou vidět autorizační hlavičky vždy.

CORS v aplikaci máme nastaven celkem standardně a nepříliš restriktivně:

2018-04-10-CORS-settings

Kde byl(y) problém(y):

Nejdříve jsme neměli povolené všechny hlavičky (pozor zejména na Authorization, která není v Chrome Developer tools defaultně vidět). Nakonec jsme stejně skočili u AllowAnyHeader().

Důležité je mít povoleno AllowCredentials(), pokud řešíte přihlašování

Na co nám nejdéle trvalo přijít je, že je potřeba povolit anonymní autentifikaci i když v aplikaci žádné anonymní požadavky nejsou potřeba (povoluje se to v IIS na obrázku níže). Je potřeba na to ovšem myslet a v aplikaci si ošetřit, že uživatel musí být přihlášen při běžném přístupu do aplikace.

2018-04-10-CORS-IIS

Na pozadí CORS funguje tak, že vzdálený klient nejdříve udělá tzv. preflight request metodou OPTIONS a v hlavičce pošle informace, na jakou URL chce jakou metodou kdo přistupovat. Pokud není povolena anonymní autentifikace, OPTIONS požadavek selže (vrátí 401), protože v hlavičce preflight requestu se dle specifikace https://fetch.spec.whatwg.org/#cors-preflight-fetch autorizační hlavička neposílá. V takovém případě vzdálený klient není schopný zjistit, zda bude mít oprávnění udělat skutečný požadavek, a tak celá komunikace selže (nebo se chová nepředvídatelně – viz podivnosti výše).

Technické podrobnosti např. zde: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Nakonec pro přehlednost ještě schéma posílání CORS požadavků:2018-04-10-CORS-schema

Hackování webů běžnými „smrtelníky“ – záznam [Jiří Kanda, HAVIT Vzdělávací okénko 19.10.2017]

Záznam z interního vzdělávacího okénka HAVIT z 19.10.2017 je publikován na našem HAVIT YouTube Channel. Téma prezentoval Jiří Kanda:

Dotčená témata:

  • Open Redirects
  • XSS – Cross Site Scripting, ASP.NET Request Validation
  • MIME-type injection
  • External JS references, CDN, Tag Managers
  • Cross Site Request Forgery (XSRF/CSRF)
  • CORS – Cross Origin Resource Sharing, Preflight requests
  • X-Frame-Options
  • X-Content-Type-Options
  • X-XSS-Protection