しばやん雑記

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

MVC

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

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

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

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

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

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

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

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

OpenID Connect に対応した LINE Login を ASP.NET Core 2.0 からお手軽に使ってみる

LINE のイベントで LINE Login が OpenID Connect に対応したという発表があったようです。昔に比べると、簡単に LINE Login の設定が出来るようになっているので、今後は色々な部分での採用が広がりそうな気もします。OpenID Connect 対応は特に重要なアッ…

ASP.NET Core MVC を使ってアプリケーションを書いた際に悩んだポイント

サンプルとか超小規模以外の ASP.NET Core MVC アプリケーションを書いてますが、いろいろと悩んだりはまったりしたポイントがあったのでまとめました。まだまだありそうなので、ちょっとずつまとめようかと思います。 addTagHelper にはアセンブリ名を指定…

ASP.NET Core MVC の Tag Helpers でフォームを作成する時の個人的なまとめ

何だかんだで一番苦労するのがフォームを作成する時なので、後から見て思い出せるように Tag Helpers を使って書く時の基本的なメモをまとめておきます。ASP.NET Core MVC 2.0 以降は Razor がアップデートされて変わりそうですが、とりあえず 1.1 対象で。 …

ASP.NET Core MVC の Razor で使える Tag Helpers のメモ書き

ちょっと真面目に ASP.NET Core MVC の Razor を書いている時に、そういえば Tag Helpers の書き方をあまり勉強していなかったと気が付いたので、これを気に個人的によく使いそうな部分だけメモります。例によってドキュメントがちゃんと用意されているので…

ASP.NET Core MVC の Areas と URL ルーティングの話

そろそろ ASP.NET Core MVC を本格的に使っていこうかと思っているので、これまで ASP.NET MVC 5 でよく使っていた Area を実際に Core MVC で使ってみることにします。とは言っても、公式のドキュメントに書いてあることで十分ですが、URL ルーティングとの…

ASP.NET Core MVC アプリケーションでスキャフォールディングが使えない時は

サンプルではなく、実際に ASP.NET Core MVC アプリケーションを開発する人が選ぶと思われる認証なしテンプレートでは、Visual Studio でのスキャフォールディングに必要なパッケージが追加されません。私は基本的に認証なしを選んで作っていくタイプなので…

ASP.NET Core MVC で大きく変わったフィルタについて調べた

仙台に行ったとき、ぼんぷろおじさんに ActionFilter で実行時にオプションを扱う場合にどうすればいいのか聞かれて、フィルタ周りまとめないといけないことを思い出したので書きます。思いのほか長くなってしまったので、久し振りに目次記法を使うことにし…

開発環境でも ASP.NET Core MVC の RequireHttps 属性を使えるようにする

ASP.NET MVC の RequireHttps 属性を使うと、HTTP で来た場合には HTTPS にリダイレクトしてくれるのですが、開発環境で 443 以外のポートを使っている場合、正しく動作しないという欠点がありました。 [RequireHttps] public ActionResult Index() { return…

ASP.NET Core MVC の Content Negotiation を活用する

ASP.NET Web API 2 でも Content Negotiation は実装されていましたが、Core MVC では進化してさらに便利な機能が追加されていたので、簡単にですが調べてみました。Formatting Response Data — ASP.NET documentationドキュメントも割と揃ってきているので…

ASP.NET MVC アプリケーションを ASP.NET Core MVC にマイグレーションしようとして挫折した話

これは既に本番環境で動作している ASP.NET MVC アプリケーションを、軽い気持ちで ASP.NET Core MVC にマイグレーションしようとした考えが甘い男の、真実の物語である。ネタ記事っぽいですが、割と真面目にマイグレーションしようとして、余りにも辛くなっ…

既存の ASP.NET Web API アプリケーションを ASP.NET Core MVC 1.0 へマイグレーションしてみた

.NET Core 1.0 と ASP.NET Core 1.0 が RTM したので、とりあえず簡単なものからマイグレーションしてみました。ターゲットは無職になる前に作ったこれです。時間を持て余した感あるので、俺得 API 作ってた https://t.co/9ag1MfPiGU— しばやん (@shibayan) …

ASP.NET Core MVC 1.0 で新しくなった URL ルーティング

地味ですが ASP.NET Core MVC 1.0 では URL ルーティングの仕組みが大きく変わりました。今までは ASP.NET のルーティングモジュールを使っていましたが、ASP.NET Core 1.0 では新規にミドルウェアとして実装されました。少し挙動が変わっていて、新しい機能…

ASP.NET Core MVC 1.0 で追加された View Components を使ってみる

ASP.NET Core MVC 1.0 に追加された機能の中で 1,2 を争うぐらい個人的には気に入ってるのが View Components です。ざっくりと説明すると Razor の中だけで使える Controller/Action です。MVC 5 までは Html.Action/RenderAction を使って呼び出せる、子ア…

ASP.NET Core MVC 1.0 でキャッシュを行う 3 つの方法

ASP.NET MVC 5 でもキャッシュのための手段はいくつか用意されていましたが、ASP.NET Core MVC 1.0 では少し方向性が変わっています。大きく変わっているのが OutputCache 属性が無くなっていることです。現実的にキャッシュを行う手段は ASP.NET Core MVC 1…

ASP.NET Core MVC 1.0 で Cookie を使ったユーザー認証を独自に実装する

ASP.NET MVC 5 までは FormsAuthentication を使って実装していた部分を、ASP.NET Core MVC 1.0 でも同じように独自で実装したいときにどうすればいいのか調べました。公式のサンプルは Identity を使っていますが、ドキュメントに Identity を使わない方法…

ASP.NET MVC で reCAPTCHA を使ってみた

今更感が半端ないですが、ASP.NET MVC で開発したアプリケーションに reCAPTCHA の version 2 を組み込む方法を調べました。何番煎じか分かりませんが、小ネタ程度にまとめておきます。reCAPTCHA を使うためには Google のサイトから URL を登録して、トーク…

ASP.NET MVC 5 アプリケーションを .NET Framework 4.6 と C# 6.0 にアップデートしてみた

リリースされたばかりの .NET Framework 4.6 が Azure Web Apps で使えるようになったらしいので、動かしていた ASP.NET MVC 5 なアプリケーションを ASP.NET 4.6 と C# 6.0 にアップデートしてみました。8 月中にリリースという話でしたが、思ったよりも早…

ASP.NET MVC の Display Mode を使っている場合には Vary HTTP ヘッダーを出力するべきだった

ASP.NET MVC の Display Mode を使えば、ビューを用意するだけで PC 版とスマートフォン版のページを同じ URL で公開することができます。既に何回か紹介しているので、Display Mode については以下の記事を参考にしてください。機能としては上の記事の通り…

ASP.NET MVC 5 アプリケーションの開発を始める時のテンプレート的なものを作った話

昔 ASP.NET MVC 5 で開発を始める上で、自分が定型的に追加している設定をまとめた記事を書きました。完全に自分用として書いた記事なので、頻繁に読むようになってしまいました。ぶっちゃけ、自分で MVC 5 アプリケーションを作り始める時に毎回参照してい…

ASP.NET MVC で HTTP 401 を返した時にログインページへリダイレクトさせない方法

割と有名な ASP.NET のフォーム認証モジュールのおせっかい機能として、HTTP ステータスコードで 401 を返すと自動的にログインページへの 302 リダイレクトに変換するというのがあります。認証が必要な Web サイトを作る場合には割と便利なんですが、API を…

なぞなぞ認証を ASP.NET MVC で実装して遊んでみた

特に意味はないのですが、はてなの各サービスで使えるようになっているなぞなぞ認証を、ASP.NET MVC の機能を使って実装してみました。なぞなぞ認証の詳細ははてなキーワードを見てください。単純になぞなぞに回答して、それが正解であればページを表示でき…

SendGrid の Inbound Parse Webhook を ASP.NET MVC から簡単に使うためのヘルパーを作った

以前に SendGrid の Parse API を使ってメールの受信をフックする - しばやん雑記 で使ったことがある SendGrid の Inbound Parse Webhook は、簡単にメールの受信が出来てとても便利なのですが、送信されるパラメータが多く、部分的に JSON だったりもする…

ASP.NET MVC 6 の概要だけをサクッとまとめておきたい

あまりにも MVC 6 は変更が多いので、概要をとりあえずサクッとまとめておきたい(ASP.NET 5 が RTM になるまでは、あまり確定情報みたいに書かないようにしているので、これもソースコード読みつつ調べた自分用メモだと思ってください。*1Release 6.0.0-bet…

ASP.NET MVC で任意のタイミングでモデルの検証を行う方法

MVC 5 でウィザード的に 1 ページごとに項目を入れていくページを作っていると、実際に DB に格納する前にセッションに入れておいたモデルの状態が正しいか調べたくなりました。てっきり「あー、UpdateModel / TryUpdateMode の中身参考にしないといけないの…

ASP.NET MVC の RequireHttps 属性は GET 以外の場合には例外を投げるので注意

タイトルの通りですが、ASP.NET MVC を使って SSL が必須のページを実装するのには RequireHttps 属性が便利ですね。しかし、この属性は GET 以外のリクエストが来ると無条件で例外を投げるようになってます。例えば HEAD リクエストを投げてみると 500 が返…

ASP.NET MVC の XSS 脆弱性 CVE-2014-4075 について調べた

昨日は SSL 3.0 の脆弱性以外に ASP.NET MVC の脆弱性に関しても情報が公開された日でした。2014 年 10 月のセキュリティ情報 (月例) - MS14-056 ~ MS14-063 - 日本のセキュリティチーム - Site Home - TechNet Blogs MS14-059: Description of the securit…