しばやん雑記

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

ASP.NET

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

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

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

Windows 8.1 や Visual Studio 2013 のリリースと同時に ASP.NET 周りも大幅にアップデートされたのですが、SignalR 2.0 で追加された機能が実に便利そうだったので紹介したくなりました。とりあえず、まずはリリースノートを確認しておきましょう。Release …

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 スロットリングが発生するとか、バグがあって失敗す…

絶対に失敗しない Windows Azure Web サイトマニュアル

タイトルはホッテントリメーカーで作りました。特に意味はありません、多分。ここ数ヶ月は Windows Azure Web サイトを使って開発していたので、その時に気が付いた点・ハマった点をまとめておきます。それ以外にも Web サイトに関係することを総まとめな記…

ASP.NET SignalR 2.0 リリース候補版が公開されました

SignalR 2.0 rc1 release notes https://t.co/Alz4Z6huTP— David Fowler (@davidfowl) August 24, 2013最近は SignalR を全然弄っていなかったですが、ちょっと前に 2.0 RC 1 が NuGet で公開されたようです。NuGet Gallery | Microsoft ASP.NET SignalR 2.0…

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 というライブラリが非常に使い勝手が悪く、特定のアプリしか想定していない作りになってい…

OWIN を使って Windows Azure の Worker Role で HTTP サービスを公開する

特に理由は無いですが、OWIN と Windows Azure の Worker Role を使って遊んでみたかったので、実際に試してみました。OWIN はかなり力が入れられているみたいなので、早めにいろいろ試しておいた方が良いと思いました。 下準備 まずは Windows Azure の Wor…

ASP.NET 開発者がチェックしておくべき Build 2013 セッション

Build 2013 も終わったことですし、ASP.NET を使っている開発者ならチェックしておくべきセッションをメモしておきます。 What’s New in ASP.NET and Visual Studio 2013 まずは Scott Hanselman 氏による ASP.NET と Visual Studio 2013 のオーバービュー的…

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 を…

.NET Framework の正規表現とメールアドレス検証に悩まされた件

今週は .NET Framework の正規表現とメールアドレス検証に目いっぱい悩まされました。事の顛末を説明すると以下のような感じ。 正規表現 Regex クラスはデフォルトでは文字クラスの扱いなどが、ECMAScript の挙動とは異なるので悩みました。もしかして:.NET…

非同期に対応した Nancy のベータ版を使ってみた

既に ASP.NET MVC / Web API / SignalR では一般的となったタスクベースの非同期処理ですが、Nancy も MyGet で公開されているベータ版では対応しているようだったので試してみました。詳しい使い方は GitHub の Wiki に書いてあります。Async Beta · NancyF…

Nancy を使って JSON API を実装するメリット

Nancy ではてなブログ用の人気エントリー API を作ってみた - しばやん雑記 で Nancy を使って JSON(P) API を実装してみたので、今回は Nancy を使って開発するメリットを少しまとめておきます。 パフォーマンス 結論から先に書いておくと、Nancy と ASP.NE…

Visual Studio 2013 と One ASP.NET の話

TechEd North America 2013 が始まりましたが、早速 Windows Azure 周りでの更新を 抱かれたい男 No1 がブログでまとめてくれていたりします。流石、安心と信頼の 抱かれたい男 No.1 ですね。そして今朝 Twitter を見ていたら、以下の Damian Edwards 氏のツ…

ASP.NET Web Stack が一斉に更新されています

何気なく NuGet で Update-Package を実行したら大量にパッケージが更新されたので、よく見てみると ASP.NET Web Stack というか、OSS 部分が全てアップデートされていました。以下のパッケージが 4.0.20710.0 -> 4.0.30506.0 といった感じにビルドナンバー…

ASP.NET MVC 4 で複数の Display Mode を組み合わせて使ってみる

この方法の欠点としては別の Display Mode との共存が出来ないことです。なのでスマートフォンへの対応が必要ない、完全に PC 向けのページなら対応可能かと思います。 ASP.NET MVC 4 の Display Mode を使って多言語対応を試してみた - しばやん雑記 と書い…

ASP.NET MVC 4 の Display Mode を使って多言語対応を試してみた

ASP.NET MVC 4 というか Web Pages 2 で追加された Display Mode ですが、一般的にはスマートフォンやその他デバイス向けにビューを切り替えるために使われることが多いと思います。しかし、今回はデバイスの種類ではなく、ブラウザの言語設定にしたがってビ…

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> 実際にコードからこの設定を読み込もうとすると、以下のように冗長なコードを書く…

Microsoft MVP for ASP.NET/IIS を再再受賞しました

今年で 3 年目ですね。思えば遠くに来たもんだ(棒読み今年はもっとグローバルに活動していきたいですね。

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# …