しばやん雑記

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

MVC

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 4 で理想的なス…

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

昔 ASP.NET MVC 5 で開発を始める上で、自分が定型的に追加している設定をまとめた記事を書きました。ASP.NET 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…

ASP.NET MVC 5.2.2 / Web API 2.2.2 / Web Pages 3.2.2 がリリースされました

先月の終わりに ASP.NET MVC / Web API / Web Pages がアップデートされていました。NuGet Gallery | Microsoft ASP.NET MVC 5.2.2 NuGet Gallery | Microsoft ASP.NET Web API 2.2 5.2.2 NuGet Gallery | Microsoft ASP.NET Web Pages 3.2.2リリースノート…

ASP.NET MVC 5 で追加された属性ベースのルーティングを使ってモデルバインダ絡みのエラーを回避する

ASP.NET MVC を利用した開発を行っている人は、下のエラー画面を 1 度は見たことがあるかと思います。MVC では URL ルーティングで定義されたパラメータやクエリ文字列を、モデルバインダが適切な型へ変換してアクションの引数へバインドする仕組みになって…

ASP.NET MVC 5.2 で Facebook アプリテンプレートが使えない問題と対応法

Visual Studio 2013 Update 1 でも ASP.NET プロジェクトを作成する時に、Facebook を選択すると Facebook アプリのテンプレートが作られます。しかし、このテンプレートに対して MVC 5.2 などにアップデートしようとすると、Microsoft.AspNet.Mvc.Facebook …

ASP.NET MVC 5.2 / Web API 2.2 / Web Pages 3.2 がリリースされました

個人的には ASP.NET vNext のほうが気になって仕方ないですが、ひっそりと ASP.NET MVC 5.2 や Web API 2.2 がリリースされてました。NuGet Gallery | Microsoft ASP.NET MVC 5.2.0 NuGet Gallery | Microsoft ASP.NET Web API 2.2 5.2.0 NuGet Gallery | Mi…

Knockout.js と ASP.NET MVC の組み合わせ時にモデルバインディングが腐る件

今日も Knockout.js を使って ASP.NET MVC に POST するようなコードを書いていたのですが、モデルバインダが意図したとおりに値をバインドしてくれない時がありました。まずは ASP.NET MVC 側のコードを見ていきましょう。難しいことはしてません。 public …

ASP.NET MVC でページャーやパンくずリストを作るときには部分ビューなどを使うと便利

Twitter で酢酸先生が ASP.NET MVC でのビューの使い回しについて悩んでいたので、久しぶりに ASP.NET についてブログを書きます。しばやんサイトに無限クロールして地獄を味合わせるか…。あ、asp,net mvcで複数のページの任意の場所にカスタムコントロール…

ASP.NET 関係で最近アップデートが行われたパッケージまとめ

最近は Windows Azure Web サイトばかり弄っていたので ASP.NET 周りが疎かになってました。先日 ASP.NET MVC のマイナーアップデートが行われていたことに気が付かなかったのがショックだったので、関係しそうなパッケージのアップデートをまとめてみます。…

ASP.NET MVC 5 での新規アプリケーション開発時に便利な設定をまとめてみた

自分が毎回新規で ASP.NET MVC アプリケーションの開発を始めるときに忘れるので、今までブログに書いた分をまとめてみました。ASP.NET MVC 5 と限定してあるのは、5 より前のバージョンではバグ持ちの設定を紹介しているからです。 Razor のみを使う ViewEn…

ASP.NET MVC 5.1 や Web API 2.1 がリリースされました

そのままですが、ASP.NET MVC 5.1 や Web API 2.1 が正式リリースとなりました。Announcing the Release of ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 - .NET Web Development and Tools Blog - Site Home - MSDN BlogsVisual Studio…

ASP.NET MVC で条件付きの検証を行う属性とモデルバインダを実装してみた

昔から ASP.NET MVC の検証を条件付きで実行したいと思っていた人生でした。言葉で説明すると分かりにくいので、ヨドバシのオンラインショップのフォームがサンプルとして都合良かったので拾ってきました。このフォームの場合、チェックの有無で検証の有無も…

Sitecore と ASP.NET MVC 間でデバイスクッキーを連携させてみた

これは Sitecore Advent Calendar 2013 - Adventar の 12 日目の記事です。以前に Sitecore と ASP.NET MVC のハイブリッドなサービスの開発をお手伝いした時に、どうしても Sitecore のデバイスクッキーを ASP.NET MVC と共有化させる必要がありました。デ…

ASP.NET MVC 5.1 や Web API 2.1 のリリース候補版が公開されました

今朝、ASP.NET チームのお偉いさんである Scott Hunter が ASP.NET MVC 5.1 / Web API 2.1 / Web Pages 3.1 のリリース候補版を公開したとツイートしていたので、ちょっと内容を書いてみようと思います。公式のブログでもしっかりと新機能の説明がされている…

ASP.NET でタブレット以外を判別する方法と Display Mode への応用

もう Facebook では 1 年の振り返りが始まっている今日この頃、いかがお過ごしでしょうか。世間では Advent Calendar のタスキ繋ぎが全力で行われていますが、初日でその役目を終えた私はのんびりと過ごしています。とか、書くと本気で本気で刺されそうなの…

ASP.NET MVC に投げた 2 つ目の Pull Request がマージされました

ASP.NET MVC の最近のバージョンには OutputCache と子アクションを組み合わせた時に、OutputCacheLocation の値を適切に見てくれないバグがありました。例えば、グローバルフィルタで OutputCache を以下のように設定します。 // 出力キャッシュを無効化し…

ASP.NET MVC 5.1 の新機能を Nightly Build で試してみた

少し前に Visual Studio 2013 と同時に ASP.NET MVC 5 がリリースされましたが、既に開発チームは ASP.NET MVC 5.1 の開発を進めています。そして aspnetwebstack は MyGet で署名済みの Nightly Build を公開してくれているので、誰でも簡単に試せるように…

ASP.NET 4.5 からルーティングで生成される URL を小文字に出来るというお話

ASP.NET MVC でデフォルトのテンプレートと同じように作ると、その URL は以下のように大文字が含まれるものが生成されてしまいますよね。しかし、SEO 的には URL は小文字で統一して欲しいです。今までは Url.Action や Html.ActionLink などで小文字を指定…

ASP.NET MVC に投げた Pull Request がマージされました

DropDownListFor と ViewBag を組み合わせた時の問題 - しばやん雑記ASP.NET MVC / Web API / Web Pages - Source Code

ASP.NET MVC 5 では X-Frame-Options が自動で出力される時がある

タイトルの通り、ASP.NET MVC 5 では X-Frame-Options: SAMEORIGIN が自動で出力される時があります。出力される条件ですが、Html.AntiForgeryToken を使った時になります。AntiForgeryToken は Web Pages の CSRF 対策クラスを使っているので、Web Pages で…

ASP.NET で自動的に発行されるクッキーの名前を変更する方法

今日はちょっとした ASP.NET のクッキーに関する小ネタです。ASP.NET は特別な設定などをしなくても自動的にクッキーを発行して、認証状態やセッション、そして CSRF 対策を行ってくれます。これは非常に便利なんですが、その時に発行されるクッキーの名前が…

Visual Studio で発行時に Razor のプリコンパイルを行う方法

Web サイトとかにデプロイを行う時に利用する Web 発行には、ビューのプリコンパイルを実行する機能があるのですが、これを使えば ASP.NET MVC の Razor ビューもプリコンパイル出来ます。プリコンパイルすると何が嬉しいかという話ですが、初回アクセス時に…

JAZUG 3 周年の LT 大会向けのアプリを作って発表してきた

お前、JAZUG に参加してないだろと言われそうですが、LT 大会でトップバッターかつ、投票用のアプリを作って発表してきました。スライドはこんな感じ。 JAZUG LT アプリを作った話 from Tatsuro Shibamura スロットリングが発生するとか、バグがあって失敗す…

ASP.NET MVC の Facebook テンプレートを使って Graph API を便利に使う

ASP.NET MVC の Facebook テンプレートは Facebook SDK for .NET をベースに、色々とアプリを作る上で便利そうな機能*1が実装されています。signed_request のデコードや認証周りを自動でやってくれるんですが、FacebookClient クラスに対する拡張メソッドや…

ASP.NET MVC で Facebook アプリを作る時には気をつけろ

最近は ASP.NET MVC 向けの Facebook アプリケーションテンプレートを使って、Facebook アプリの開発をしていたりするんですが、この Microsoft.AspNet.Mvc.Facebook というライブラリが非常に使い勝手が悪く、特定のアプリしか想定していない作りになってい…

ASP.NET MVC 5 で追加された IAuthenticationFilter と Authorize 属性の関係

ASP.NET MVC 4 までは IAuthorizationFilter インターフェースだけが用意されていましたが、MVC 5 からは IAuthenticationFilter インターフェースが追加されました。名前が似ている二つのインターフェースですが、機能としては明確に異なっているので ASP.N…

Build でリリースされた ASP.NET のアップデート

Build 2013 のキーノートでは Windows 8.1 と Visual Studio 2013 の話題が中心でしたが、今回は Visual Studio 2013 で追加された ASP.NET のアップデートに関してまとめておきます。既に ASP.NET の公式サイトでは記事が公開されています。ASP.NET vNext |…

ASP.NET MVC 4 で理想的なスマートフォン対応サイトを作成する方法

ちょっと前にこんな記事が Twitter や Facebook で話題になっていました。PC とスマホ両対応しているサービスは要注意かもしれません。グーグル、スマホ対応が不適切なサイトの検索順位を引き下げへ - CNET JapanTwitter や Facebook でシェアされた URL を…