しばやん雑記

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

ASP.NET

ASP.NET MVC で指定した値が入力されているか検証する属性を作ってみた

よく会員登録などのフォームにある、会員規約に同意しますというチェックボックスってありますよね。ASP.NET MVC でチェックされていない時にエラーを表示する場合、Required 属性を使えば対応出来そうだと考える人は多いと思います。 public class FormMode…

ASP.NET SignalR で頻繁に通信が行われるアプリを効率よく実装する方法

ASP.NET SignalR のデモでよく見るような、ドラッグドロップでオブジェクトを動かして、それを全クライアントに配信するようなアプリケーションだと、そのまま実装するとサーバとクライアント間で数 ms 間隔で通信が行われてしまいます。それは非常に効率が…

ASP.NET プロジェクトで構成マネージャと Web.config 変換を活用する

実際に ASP.NET でアプリケーションを開発していて、それを公開環境へデプロイする時には Web.config に書かれている接続文字列や設定などを、開発環境のものから変更する必要が出てくると思います。最近の Visual Studio では Web.config の内容を XSLT で…

SwissKnife.Mvc の 0.0.2 を NuGet でやっと公開しました

NuGet Gallery | SwissKnife.Mvc 0.0.2もうちょっと説明とかしっかり書けという感が満載なんですが、とりあえずいろいろと実装したかなと思ったので公開してみました。リファレンスなんて立派なものはまだないので、このエントリに基本的な機能を書いておき…

ASP.NET MVC 4 で現在の Display Mode を見てアクションを振り分ける

ASP.NET MVC 4 アプリケーションのスマートフォン対応は、理想的には ASP.NET MVC 4 というか Web Pages 2 で追加された Display Modes だけで解決できればいいんですが、今回はどうしてもアクションを分けたくなりました。しかし、他のページはビューだけ切…

IIS と Vary ヘッダと HTTP 圧縮モジュールのバグ

id:Waquesseix この記事を読んで早速vary: user-agentを追加しようと思ったら、なんかバグでvaryが変えられない(圧縮をオフにしない限り)みたいでがっくりしました。。。 ASP.NET でカスタム HTTP ヘッダを追加する方法 - しばやん雑記 そういえば、ASP.NET …

ASP.NET でカスタム HTTP ヘッダを追加する方法

機密情報を含むJSONには X-Content-Type-Options: nosniff をつけるべき - 葉っぱ日記この記事を見て、そういえば ASP.NET でカスタム HTTP ヘッダを追加する方法を知らないなと思ったので、Web.config だけで解決できないか調べてみました。結論から書くと…

ASP.NET MVC 4 のブラウザオーバーライド設定の保存先をカスタマイズする

ASP.NET MVC 4 のブラウザオーバーライドを JavaScript から設定する - しばやん雑記 で ASP.NET MVC 4 というか Web Pages 2 のブラウザオーバーライド機能はクッキーを使って実装されていると紹介しましたが、実はこの User-Agent を保存する部分は開発者…

Sinatra ライクな .NET 用軽量 Web フレームワーク「Nancy」を使ってみた

Nancy - Lightweight Web Framework for .net NancyFx (Custodians of the Super-Duper-Happy-Path) · GitHub恥ずかしながら、今まで Nancy というものを知りませんでした。知ったきっかけは Scott Hanselman 氏のブログ記事です。One ASP.NET: Nancy.Templa…

ASP.NET で DbContext を扱う際のベストプラクティス

ASP.NET MVC のスキャフォールディングを使うと、以下のように Entity Framework の DbContext をコントローラのフィールドに持つコードが生成されます。 public class CustomerController : Controller { private SampleDbContext db = new SampleDbContext…

Unity DI 3 で追加された ASP.NET MVC と Web API 向けライブラリ

更新内容を見ると ASP.NET MVC と Web API への対応を含んでるとありますが、これは何を指すのかちょっと不明ですね。 NuGet 2.5、Unity DI 3 が公開されていました - しばやん雑記 前回ではこんなふうに書いておきましたが Unity Developer's Guide を読む…

ASP.NET SignalR 1.1 でのスケールアウト

SignalR 1.1 のベータが公開されて、スケールアウトプロバイダもさらに新しくなりましたね。内容に関しては開発者の Devid Fowler 氏のブログが最高にわかりやすいです。SignalR 1.1 beta - Unhandled Exceptionちょっと指定方法が変わったのと、エラー処理…

ASP.NET SignalR 1.1 beta が公開されました

SignalR 1.1 beta is out! https://t.co/IqLnRMf1Vp including new scale out providers. See the release notes https://t.co/XGtK9pHgIQ— David Fowler (@davidfowl) April 11, 2013という訳で、SignalR 1.1 のベータが公開されたようです。GitHub のマイ…

Web.config から AppSettings クラスを生成する T4 を NuGet で公開しました

Web.config から AppSettings クラスを作成する T4 を書いてみた - しばやん雑記 の強化版を NuGet で公開しました。NuGet Gallery | SwissKnife.T4.AppSettings 0.0.5例えば、ASP.NET MVC 4 のアップデートで追加された Facebook App のテンプレートにイン…

Web.config から AppSettings クラスを作成する T4 を書いてみた

ASP.NET で開発していて毎回思うのが、設定を Web.config に持たせた時のコードからの扱いにくさです。例えば以下のように appSettings セクションに設定を追加します。 <appSettings> <add key="Foo" value="123" /> <add key="Bar" value="456" /> <add key="Baz" value="789" /> </appSettings> 実際にコードからこの設定を読み込もうとすると、以下のように冗長なコードを書く…

ASP.NET と MachineKey の関係をまとめてみた

先日、盛大に罠にはまったので MachineKey について改めてまとめておきます。そもそも MachineKey とは何ぞやと言う話ですが、フォーム認証やビューステートでの検証と暗号化で使われるキーです。ASP.NET のランタイムが生成する認証用のクッキーやビュース…

ASP.NET SignalR で非同期処理を行う

SignalR は基本的に非同期で通信が行われるので、クライアント側ではブロッキングせずに通信を行うことが出来ますが、サーバ側の実装となるとまた別の話になります。ASP.NET MVC などと同じように Hub のメソッド内でファイル、ネットワーク I/O などの時間…

ASP.NET 4.5 で MachineKey の扱いが微妙に変わっていた

全く気が付かなかったんですが、ASP.NET 4.5 では MachineKey を使った暗号化の処理が拡張されていて、それによってフォーム認証のチケットの互換性が無くなっていました。最初は原因が全く分からなかったので色々と試したのですが、どうやら ASP.NET 4.5 向…

ExpressWeb で ASP.NET SignalR を使ってみる

ASP.NET SignalR は IIS 8 と .NET Framework 4.5 が必要だと思っている人は多いみたいですが、実際には IIS 7.5 と .NET Framework 4 の組み合わせでも WebSocket が使えないだけで動作自体は全く問題ありません。今のところ IIS 8 と .NET Framework 4.5 …

GitHub で寄せ集めライブラリを作成しています

そろそろ作成したヘルパー類をちゃんと例外処理も実装して GitHub で公開しようかなぁとか思ってます。 ASP.NET MVC でチェックボックス周りを良い感じに扱う - しばやん雑記 以前にこう書いておきながら何もやってなかったんですが、流石に自分で昔ブログに…

ASP.NET MVC でブラウザにページをキャッシュさせない方法

ASP.NET MVC には OutputCache 属性が用意されているので、多少は Cache-Control ヘッダを弄ることが出来ます。 [OutputCache(Location = OutputCacheLocation.None, NoStore = true)] public ActionResult Index() { return View(); } しかし、OutputCache …

ASP.NET MVC のモデルバインダで Dictionary を扱う

ASP.NET MVC のモデルバインダは List や配列は添え字がシーケンシャルであれば、複合型でも問題なくバインド出来るのは知っていましたが、今日まで Dictionary のバインドに対応してることを知りませんでした…。これは恥ずかしい。ASP.NET Wire Format for …

ASP.NET SignalR で接続中のクライアントを数えてみる

SignalR のサンプルアプリケーションってボタンをクリックしたり、チャットでメッセージやり取りするものが多いですね。実際に試してみると結構面白いんですが、本当に複数人が繋がっているのか分からないので、いまいち実感がわかなかったりします。自分以…

ASP.NET MVC の HTML ヘルパーと null の関係

ASP.NET MVC に標準で用意されている HTML ヘルパーはオーバーロードが非常に多いです。簡単な例を挙げると Html.BeginForm を使って GET として実行されるフォームを作成する場合は、以下のようにオーバーロードメソッドを使って書けますね。 @using (Html.…

ASP.NET のシェアは本当に低いのか

C# や ASP.NET は新しいバージョンほど使われない - しばやん雑記 を書いていて、ASP.NET で動いてるサービスを見たことが無いと思ってる人って結構多いんだろうなぁと思いました。ということで、実際のシェアがどうなってるのかを調べてみようと思います。…

C# や ASP.NET は新しいバージョンほど使われない

微妙に釣りタイトルです。書こうと思ったきっかけはこちらの記事です。 前職ではC#/ASP.NETをよく書いていた。 キャリア的には5年ぐらいだったけど、悲しいことにずっとC# 2.0止まりだった。 型推論とかLINQとかは結局実務では使わずじまいだった。 Java/C# …

ASP.NET SignalR 1.0.1 が出てました

NuGet Gallery | Microsoft ASP.NET SignalR 2.0.0知らぬ間に ASP.NET SignalR 1.0.1 が出ていました。リリースノートを見るとバージョン番号が示す通り、このバージョンではバグ修正しか行われていないようです。Page not found · GitHub恐らく、今月中には…

ASP.NET MVC で SelectList を使ったフォームの検証を行ってみる

ASP.NET MVC で Html.DropDownListFor を使った場合、どうやって検証を行っていますか?不正な値が選択されないという想定で作る人もいると思いますが、大抵の場合はブラウザの開発者ツールで値を改ざんされて送られる可能性を考慮する必要があります。困っ…

ASP.NET MVC で Razor の基本クラスを変更する

ASP.NET MVC の場合は Razor で書かれたビューは System.Web.Mvc.WebViewPage クラスを基本クラスとしてコンパイルされます。例えば以下のようなシンプルな Razor ビューがあるとします。 @{ ViewBag.Title = "Index"; } <h2>Index</h2> これをコンパイラが C# コード…

ASP.NET MVC でチェックボックス周りを良い感じに扱う

ASP.NET MVC の HTML ヘルパーには CheckBox/CheckBoxFor メソッドが用意されていますが、これを使って実現できるのは bool でのオンオフが必要なチェックボックスだけです。しかし、世の中には「当てはまる項目にチェックを入れてください」というようなチ…