2011-07-24 13 views
4

私はasp.netフォーラムでこの質問をしました。誰も私が何を言っているのか分からないようです。それはなぜなのか分かりませんが、洞察力のある人がいるかどうかをここで尋ねます。デフォルトのAccountControllerサンプルはいつ変更されましたか?

MVC2がリリースされたとき、組み込みのMembershipおよびFormsAuthenticationクラスをテスト可能なインターフェイスとサービスでラップしたサンプルAccountControllerがMVC2に含まれていました。私はこれについて多くを読んで、メンバーシップとFormsAuthenticationクラスは簡単にテストできなかったので、それは良いことと考えられました。

最近、私は最新(SP1、MVC3、ツールアップデートなど)の環境で新しいサンプルプロジェクトを生成し、AccountControllerがはるかに簡単であることがわかりました。 InterfacesとMembershipServiceとFormsAuthenticationServicesはなくなりました。このサンプルでは、​​MembershipおよびFormsAuthenticationクラスが直接呼び出されるようになりました。

これがいつ起こったのか、誰が知っているのでしょうか?テスト可能なインターフェイスはもはや正しいと見なされませんか?これを変更する技術的な理由はありましたか?

最高のことは、開いているURLに戻りURLを渡すときに起こりうる脆弱性を取り除くための変更の一環として起こったことです。

洞察?

答えて

0

アカウントコントローラが

+0

ありがとう@Skud、それは役立ちます。私は、nuget経由でjQueryを更新する機能は素晴らしいことを認めています。あなたはなぜその変更がなされたのか考えていますか? –

+0

手掛かりではないので、非ローカルリダイレクトを停止するためにそこに配置された修正を禁止してください。 asp.net MVCの概要ページには、「AccountControllerの改良点:インターネットプロジェクトテンプレートのAccountControllerが大幅に改善されました」というメッセージがあります。 – Skuld

3

新しいモデルは、AccountModelがPOCOクラスであるEFのコードの最初のアプローチに似ています。新しいAPIの中には、もはや抽象はありませんが、FormsAuthentication.SetAuthCookieのような静的メソッドへの直接呼び出しによって、このコードは単体テストには難しくなります。実際のアプリケーションコードをベースにすることをお勧めしません。

また、LogOnメソッド内の脆弱性を修正しました。この脆弱性は、リダイレクトする前にリターンurlが相対URLかどうかを検証していませんでした。

個人的には、コントローラロジックとその依存関係の結合を弱めるために抽象化を使用することをお勧めします。これにより、単体テストのコードが簡単になります。

ビューモデルを使用せずにすべてのドメインモデルをビューに渡す私は、完全なアンチパターンです。私は決してそれらを気にしませんでした。私は単に空のプロジェクトを作成し、自分のやり方でやります。デフォルトのプロジェクトでは、彼らはさらにViewBagをキリストのために使っています!

+0

だからAccountControllerサンプルはEF 4.1で変更されました(彼らはまたNuget経由でのjQueryの使用を含む)MVC3ツールのアップデートで変更されたのですか?それはむしろ奇妙に思える。メンバーシップがEFを使用していないときにEFに合うように変更する理由も混乱しています。メンバーシップテーブルをモデルに追加することをお勧めしません。 –

+0

@Mystere Man、いいえ、EFは使用しません。これは、AccoutModelがPOCOクラスである同じモデルと単純に一致します。コードは両方とも 'SqlMembershipProvider'を呼び出すことで終わるので、新しいモデルは' Membership.ValidateUser'を直接呼び出すのと同じですが、ASP.NET MVC 2では抽象化を使用していました。 –

+0

右ですが、私の質問はなぜでしょうか?テスト可能なモデルをバックトラックするのはなぜですか?テスト可能なモデルについては、紹介されたときに多くの話があったが、覗き見なく変更されていたので、誰かが設計上の意思決定に関与してくれることを望んでいた。 –

関連する問題