ASP.NET Core
appsettings.jsonに書くだけで構成できた。 learn.microsoft.com ちなみにASP.NET Core 2.1でも使えた。 { "Kestrel": { "Endpoints": { "Http": { "Url": "http://*:8080" }, "Https": { "Url": "https://*:8081", "Certificate": { "Subject": "証明書のサ…
アクセストークンを Authorize ヘッダーではなく、URL クエリパラメーターで渡したい。 認証では Microsoft.AspNetCore.Authentication.JwtBearer を使っていて、何か方法があるのではと調べてみたら、案外簡単に実現できた。 var builder = WebApplication.…
調査目的で、ASP.NET Core MVC とかが DI コンテナに登録したサービスに処理を挟み込みたいことがある。そんな時は、下記のようなクラスと拡張メソッドを用意。 internal class Decorator<TService> { public TService Instance { get; set; } public Decorator(TServi</tservice>…
例えば REST API を提供していて、ブラウザ上から JavaScript で呼び出せるように、CORS 対応したい。でも、許可するのは登録してもらったオリジンだけにしたい。そんなとき。 Microsoft.AspNetCore.Cors.Infrastructure.ICorsPolicyProvider を実装したクラ…
証明書はあらかじめ用意しておく。 openssl なり何なり使って、自己署名証明書を作成するなら↓みたいな感じ。 #!/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" PRIVATE_PEM=$DIR/private.pem PUBLIC_PEM=$DIR/public.pem P…
1人でフロントエンドとバックエンドの両方を開発していたら、DDD と軽量 DDD の区別が付かないような状況になってきた。個人的には軽量 DDD 上等。ただ、アーキテクチャに関して言えば、クリーンアーキテクチャはやり過ぎ感あるので、シンプルなレイヤーアー…
Kestrel のエンドポイントは、デフォルトだと http://localhost:5000;https://localhost:5001。デフォルトのままでいいやと、Windows Server 2016 の VM で Windows サービスとしてセルフホストしたら、VM 外からアクセスできなくてハマった。 VM 内から htt…
大人の事情で、ASP.NET Core アプリを Microsoft.AspNetCore.Hosting.WindowsServices を使って Windows サービスでホストしていたんだけど、カレントディレクトリの変更は不要と思ってコードを省略したら、ヒドイ目にあった。 public class Program { publi…
はじめに ASP.NET Core で gRPC と gRPC-Web を 1 つのアプリでホストできることは確認した。 tnakamura.hatenablog.com gRPC と MVC はどうだろうか?試してみた。 gRPC サーバーに Web API を追加 GreeterController using Microsoft.AspNetCore.Mvc; name…
はじめに Grpc.AspNetCore.Web を使えば、プロキシを別に立てる必要なく、ASP.NET Core のパイプラインに gRPC-Web を組み込める。 gRPC-Web を組み込んだ場合に、gRPC-Web だけではなく通常の gRPC も使えるのか、気になったので試してみた。 gRPC サーバー…
IdentityServer4 でいろいろ試したときのメモ。当時のバージョンは 4.1.1。 www.nuget.org IdentityServer4 の「Interactive Applications with ASP.NET Core」で ProfileService が呼ばれるタイミング 以下の順番で呼ばれていた Account/Login ProfileServi…
はじめに ドメイン駆動設計のパターンの一つである値オブジェクトを実践するようになってから、ASP.NET Core Identity でユーザーの ID の型 が string なことに恐怖を感じるようになった。ユーザー ID を表す値オブジェクトじゃないと安心してコード書けな…
はじめに Swashbuckle.AspNetCore を使うことで、ASP.NET Core MVC で実装した Web API に Swagger UI を組み込める。 docs.microsoft.com Web API の動作確認をする程度ならこれで十分だけど、せっかく Swagger/OpenAPI を使うなら、クライアントのソースコ…
はじめに HttpClient を使って http で Authorization ヘッダー付きのリクエストを送信し、https にリダイレクトされると、https のリクエストには Authorization ヘッダーが付かない。 以下、実験コード。 Web API HTTP リクエストのヘッダーをログに出力し…
はじめに ASP.NET Core で JWT Bearer 認証を使うときに Startup.ConfigureServices で呼び出す AddJwtBearer は、 任意の authenticationScheme を指定できる。 となると、authenticationScheme さえ重複しなければ複数回呼び出しても問題ない、はず。 気に…
はじめに ASP.NET Core で実装した Web API の前段にリバースプロキシを置く必要がありそう。 しかも、そのリバースプロキシはデータベースにある情報を使ってリクエストの振り分けを行わなければならないため、 プログラマブルなリバースプロキシが求められ…
はじめに 大人の事情によって .NET Framework 4.8 で動かさざるをえない ASP.NET Core 2.2 製 Web API を、OAuth2.0 か OpenID Connect に対応させる必要があり、IdentityServer4 を使う予定でいた。 その IdentityServer4 は 5/1 時点で v3.1.3 が最新。も…
はじめに protobuf-net.Grpc を使ってコードファーストに ASP.NET Core gRPC サービスを実装する場合でも、 ASP.NET Core の JWT Bearer 認証ミドルウェアを使うことができそうだ、 というところまで前回確認できた。 tnakamura.hatenablog.com Authorizatio…
はじめに ASP.NET Core gRPC は ASP.NET Core のミドルウェアをサポートしているけど、 protobuf-net.Grpc を使ってコードファーストで実装する場合でも、 JWT Bearer 認証が使えるか試してみた。 Shared プロジェクトを作成 毎度おなじみの、 クライアント…
はじめに WCF では OperationContext の IncomingMessageHeaders と OutgoingMessageHeaders を使って、 カスタムヘッダーをクライアントから送ったり、サーバーから返したりできた。 tnakamura.hatenablog.com gRPC には Metadata という同じような機能があ…
はじめに ASP.NET Core MVC のモデルバインドで、 JSON をバインドした後にモデルのプロパティの値が null だったとして、 デフォルト値の null なのか、 それともクライアント側から明示的に null を渡されたのか判断したい。 そして、null を設定できるプ…
はじめに 先日、WCF から gRPC に移行するときの手段として、.proto ファイルを書くのではなく、protobuf-net.Grpc を使って C# のコードから gRPC のクライアントとサーバーを動的に生成する方法を紹介した。コードファースト ASP.NET Core gRPC と命名。 t…
この記事は、C# その2 Advent Calendar 2019 の二日目の記事です qiita.com はじめに コードファーストで開発したい protobuf-net.Grpc コードファースト ASP.NET Core gRPC をやってみる .NET Core ライブラリ作成 NuGet パッケージ追加 データコントラクト…
はじめに ASP.NET Core アプリをコンテナ化したいけど、 .NET Framework の資産を捨てられないので、 ランタイムに .NET Framework を選択し、 Docker + Windows コンテナで行くことに。 手始めに、ASP.NET Core アプリをコンテナ化して、 Windows コンテナ…
Microsoft Docs によると、HTTP.sys はポート共有をサポートしていると書いてある。 docs.microsoft.com ただ肝心のやり方が載ってない。 見つけられないだけかも? だけど推測はできる。 おそらく、重複しない URL プレフィックスを指定してやればいいんだ…
はじめに 以前 ASP.NET Core MVC と WCF のベンチマークを比較したことがあって、 そのときは WCF の方がかなり速いなぁ、という結果だった。 ASP.NET Core MVC が思いのほか遅いのが気になったけど、それに関しては当時調べず。 tnakamura.hatenablog.com …
ASP.NET Core には HostedService という機能があって、 バックグラウンドタスクなんかを実装するのに使えたりする。 docs.microsoft.com 上のドキュメントでは、そのものずばりバックグラウンドタスクを実装しているわけだけど、 WCF サービスも実行できる…
GraphQL でネストしたデータを取得するクエリを発行するとき、 N+1 問題を回避するために、 ネストしたデータの先読み込みか遅延読み込みを行う必要がある。 先読み込みの場合は、クエリのリゾルバ内で Entity Framework Core の Include を使って実装できる…
GraphQL でコレクションデータの取得やページネーションを実現する場合、 Relay 由来の Connection や Edge といったインタフェースを定義するのが定石になっているみたい。 GraphQL.NET はそれらをサポートしていて、ConnectionType や EdgeType といった型…
ASP.NET Core MVC で実装した Web API を HTTP.sys でホストすることで、利用に Windows 認証が必要な Web API を実現できた。 tnakamura.hatenablog.com これでひと段落と思いきや、JWT Bearer 認証もサポートする必要が出てきたので、HTTP.sys でホストし…