しばやん雑記

ASP.NET Core とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET Core

ASP.NET Core の HSTS はデフォルトだと有効期間が短い

ASP.NET Core は 2.1 からプロジェクトの作成時に HTTPS 用の構成を有効化すると、デフォルトで本番環境の場合には HSTS が有効になっています。同時に HTTPS へのリダイレクトも有効になります。デフォルトの HSTS は有効期間が 30 日と短めになっています…

C# と Polly を使って回復力の高いアプリケーションを書く

昔のように高い信頼性を持つオンプレのハードウェア上で動いていたアプリケーションとは異なり、昨今のクラウド上で動いているアプリケーションは障害が発生する前提でコードを書く必要があります。クラウドのハードウェアは毎日どこかで壊れるので、それを…

ASP.NET Core 2.2 で追加された Endpoint Routing と Core MVC での互換性

いろんな場所でちょいちょい話してた Endpoint Routing について調べたので書きます。パフォーマンス改善が目立った ASP.NET Core 2.2 の更新内容としては、唯一 Endpoint Routing は特定のパターンでは Breaking change となります。そもそも Endpoint Rout…

Azure App Service 上での ASP.NET Core 2.2 のパフォーマンス

ASP.NET Core 2.2 と同時にリリースされた ANCM v2 が +400% パフォーマンス改善したと書かれていたので、実際どのくらいまで頑張れるのか調べたくなりました。ブログにあった +400% という数値は恐らく物理マシンを使っているので、実際に Azure 上の一般的…

Azure App Service で ASP.NET Core 2.2 と ANCM v2 が使えるようになった

.NET Core 2.2 リリース時には 12 月末までの対応が宣言されていた Azure App Service での .NET Core 2.2 対応ですが、全リージョンへのデプロイが完了したようです。デプロイのタイミングによっては .NET Core 2.2 はインストールされていても、ASP.NET Co…

ASP.NET Core 2.2 で追加された Health Checks API の基本的な使い方とカスタマイズ

ASP.NET Core 2.2 から Health Checks API が実装されました。最近の Container や Microservices の流れでは必須機能と言えるので、シンプルな API として実装されたのは良い感じです。ドキュメントがありますが重要な機能だからかとても長いです。過去最長…

ASP.NET Core / Entity Framework Core 2.2 と Cosmos DB SDK の改善

書く気力がほぼ無かったんですけど、Cosmos DB の .NET SDK がついに OSS になったのを記念して書きます。.NET Core 3.0 とか Visual Studio 2019 は詳しい人が何か書くはず。とりあえずブチザッキと ufcpp.net を読んでおけば大体は掴めます。Preview 3 の…

ASP.NET Core 向けに Azure Table Storage を利用する Configuration Provider を書いた

タイトルの通りですが、ASP.NET Core と一緒に追加された Configuration 周りは Provider を実装すると簡単に拡張できるようになっているので、実際に Azure Table Storage 向けの実装を書いて試してみました。流れとしては以下の 2 つを継承したクラスを実…

ASP.NET Core 2.2 / Entity Framework Core 2.2 Preview 3 の気になった機能

今年の終わりにリリース予定の .NET Core 2.2 ですが、ASP.NET Core と Entity Framework Core に関しては Preview 3 で機能が出そろった感があるので、簡単に確認をしておきました。予定通り 2.2 は小規模なリリースとなるので、これ以上の追加は無いかと思…

ASP.NET Core 2.1 で未ログイン時にリダイレクトされる条件を調べた

ASP.NET Web API が追加されたときに問題になった、HTTP 401 を返すとリダイレクトに変換される挙動ですが、ASP.NET Core 2.1 でも近い挙動になるようにデフォルトで設定されています。当時は謎のキーを追加しましたが、結局 ASP.NET 自体にフラグが追加され…

Library Manager を使ってクライアントサイドのライブラリをシンプルに利用する

Visual Studio 2017 の 15.7 ぐらいで入ると言われていて入らなかった Library Manager が、こないだリリースされた 15.8 で入るようになりました。これまで Visual Studio では NuGet や Bower が標準でサポートされてましたが、今回の Library Manager は…

LTS になった .NET Core 2.1.3 がリリース

.NET Core 2.1 が LTS になると言われ続けて多少時間がかかっていましたが、2.1.3 でようやく LTS が宣言されました。3 年間の長期サポートが提供されます。予定通り .NET Core 2.0 は 10 月頭でサポートが切れるはずです。早めの移行を。これまでと同様に A…

ASP.NET Identity から ASP.NET Core Identity へ移行してみた

ASP.NET MVC 5 から Core MVC 2.1 への移行作業を行っていますが、地味に Identity 周りの移行ではまった部分が多かったのでメモとして残します。作業としては DB のマイグレーションがメインです。移行に関してはドキュメントがありますが、正直これは役に…

ASP.NET Core 用のメタパッケージを絶対に使うべき理由

ASP.NET Core 2.0 から導入された必要なパッケージを一通り参照するメタパッケージですが、あまりにも参照が多いので何となく嫌な感じがする人はいると思いますが、絶対に使うべきなので理由を書いておきます。メタパッケージに関しては公式ドキュメントにあ…

ASP.NET Core 2.1 の暗黙的なバージョンには注意

適当に Twitter を眺めていると、モリス先輩が ASP.NET Core Module 周りのエラーではまってそうだったので、また鰻を奢ってもらうために助けることにしました。曰く、Visual Studio のテンプレートから作成して、App Service にデプロイしただけで発生する…

ASP.NET Core の Dependency Injection はコンストラクタのオーバーロードに対応していない

ASP.NET Core 1.0 時代に書いた気もしますが、最近は ASP.NET MVC 5 から ASP.NET Core MVC 2.1 への移行を行っていて、いい感じに MVC 5 と Core MVC 2.1 で共存させないといけない部分があり、DI 周りではまったので調べました。まあ、タイトルの通り ASP.…

ASP.NET Core でもステータスコード単位でカスタムエラーページを表示したい

ASP.NET Core でも UseStatusCodePages を使えば 400-599 のステータスコードの場合に、専用のページを表示できることを前に書きました。最低限必要な機能はちゃんと揃っています。しかし UseStatusCodePages を使って対応できるのは、ステータスコードを UR…

ASP.NET Core 2.0 から 2.1 へのアップデートを行ったメモ

.NET Core 2.1 と ASP.NET Core 2.1 がリリースされたので、これまで 2.0 や 2.1 rc1 で開発していたアプリケーションを 2.1 にアップデートしてました。2.1 rc1 は特にやることないのですが、2.0 からはちょっと作業が必要だったのでメモ。といっても、基本…

.NET Framework / .NET Core 向け Docker Image のリポジトリが変更された話

多分 .NET Framework 4.7.2 と .NET Core 2.1 のリリースを狙ったタイミングだと思ってるのですが、この 2 つを利用するための公式 Docker Image のリポジトリが変更されています。地味に同じようなのにイメージが異なっていた .NET 系の Docker Image が統…

ASP.NET Core でカスタムエラーページを用意する

de:code 2018 の Ask the Speaker で貰った質問にサクッと回答できなかったので、検証した内容をブログに書いて残します。MVC と Web API でのエラーページ周りの質問だったと記憶してます。ASP.NET と IIS を使っている場合は Web.config で customErrors …

Application Insights で IP が取れない件と ASP.NET Core で Telemetry Initializer を追加する方法

ASP.NET Core アプリケーションに Application Insights を追加して使ってましたが、いつからかクライアントの IP アドレスが 0.0.0.0 になってしまってました。元々最後のオクテットは 0 になってたのは知ってましたが、なんか不具合化と思ってました。軽く…

.NET Core 2.1 / ASP.NET Core 2.1 Preview 1 の気になった部分だけ試した

先月頭にロードマップが公開されていた .NET Core 2.1 ですが、もろもろ関連するもの全てが Preview 1 という形でリリースされました。ASP.NET Core 2.1 も Preview 1 となりましたが、今回は SignalR が入ったりと更新が多いですね。HttpClientFactory とか…

ASP.NET Core 2.1 と ANCM In-Process Hosting の話

スケジュールが遅れていた気がする .NET Core 2.1 / ASP.NET Core 2.1 ですが、Scott Hunter が Channel 9 の動画付きでブログを公開してました。昔は ASP.NET の担当だった気がしましたが、今は .NET 全体の Director だったのですね。People have been ask…

ASP.NET Core で Azure AD B2C を使った際に謎のエラーが多発する問題

ASP.NET Core の OpenID Connect Middleware を使って Azure AD B2C なログインを GitHub で公開されているサンプルとほぼ同じように実装したら、よくわからないエラーが多発して困ったという話です。実際に Application Insights からデータを引っ張ってき…

ASP.NET Core で Open Redirect 攻撃を避けるために LocalRedirect / IsLocalUrl を使う

ちょっと前に ASP.NET Core で Open Redirect の脆弱性が見つかって修正したという話が出てました。歴史的に ASP.NET は Open Redirect の脆弱性が多い気もしますが、デフォルトの挙動が ReturnUrl を受け取り、それを使うという形なので注意したい部分では…

Nano Server で ASP.NET Core アプリケーションを実行する

これまでに ASP.NET Core は大体 App Service か Linux の Docker でしか動かしておらず、Nano Server を使ったことがなかったので試しておくことにしました。といっても、難しいことはなく Visual Studio で ASP.NET Core プロジェクトを作る時に Windows …

ASP.NET Core から SendGrid の Template Engine を使ってメールを送信する

最近は仕事で ASP.NET Core MVC を使ったアプリケーションを書いてきて、メール送信が必要になったので SendGrid を例によって使うわけですが、今回は Template Engine を使って送信することにしました。使うために調べは済んでましたが、これまでに仕事で使…

Azure AD B2C を ASP.NET Core で使うと頻繁にログアウトするのを直す

Azure AD B2C を使ってログイン処理を実装した ASP.NET Core なアプリケーションが、何故か頻繁にログアウトしてしまうので調べてました。これもまた地味にはまったポイントです。とりあえず OpenIdConnect な Middleware のコードを読んで調べました。AAD B…

ASP.NET Core で静的コンテンツのキャッシュを適切に行う

ASP.NET Core で静的コンテンツを配信する時に、デフォルトだと挙動が厄介なので設定を変更した方が効率的という話です。地味にはまったのでメモとして残します。 TL;DR Static Files Middleware で Cache-Control を付ける 更新されるファイルには asp-appe…

ASP.NET Core MVC を使ってドロップダウンリストをいい感じに実装する

大昔に書いた ASP.NET MVC 3 向けの内容を Core MVC 向けにします。と言ってもほぼ別物になってますが、基本的な考え方は SelectListItem 側に寄せる、なのでいい感じに扱えるようにしてみます。Core MVC では Razor が超進化しているので、DI や Tag Helper…