別の質問に基づく: MVC4 での子オブジェクトの作成 - 親の情報が Create() コントローラーに渡されない
MVC は、クライアントを介さずに HttpGet Create() から HttpPost Create() にデータを送信するメカニズムを提供しますか? クライアントにとって意味のないデータを Post メソッドに送信する必要がある場合、ビューが乱雑になり、潜在的な攻撃者にモデル プロパティが過度に公開されないようにするにはどうすればよいでしょうか?
別の質問に基づく: MVC4 での子オブジェクトの作成 - 親の情報が Create() コントローラーに渡されない
MVC は、クライアントを介さずに HttpGet Create() から HttpPost Create() にデータを送信するメカニズムを提供しますか? クライアントにとって意味のないデータを Post メソッドに送信する必要がある場合、ビューが乱雑になり、潜在的な攻撃者にモデル プロパティが過度に公開されないようにするにはどうすればよいでしょうか?
GETアクションとPOSTアクションは、クラスの単なるメソッドです。特定の条件下でコードのブロックを実行することが唯一の懸念事項である場合、ここでPOSTを使用する理由があるようには思えません。
POSTを変更して(属性を削除)、クライアントがアクセスできないようにプライベートメソッドにします。GETで、必要なチェックを実行してから、メソッドを呼び出します。
POSTを公開する必要がある場合は、問題のコードをGETまたはPOSTから呼び出すことができる個別のプライベートメソッドにリファクタリングします。より良い実装は、再利用/テスト/SoC用にそこにあるメソッドを持つ別のクラスです。
ここでDBを使用している場合は注意が必要です...GET中にDBに書き込む正当な理由がいくつかありますが、これはほとんどの状況でGETのべき等の性質ではないことに注意してください(http://www。 w3.org/Protocols/rfc2616/rfc2616-sec9.html)。
乾杯。
はい - 他の回答で述べたように、TempData を使用できますが、これは必要ありません。エンティティの ID と名前だけを使用しています。ビュー モデルにそれらだけを渡すだけです。完全なエンティティは必要ありません。サーバー側では、ユーザーがそれらのレコードにアクセスできることを確認してください。たとえば、顧客レコードを編集していた場合、現在のユーザーが次のような方法でアクセスできるようにします。
var currentUsersCompanyId = GetCurrentUserCompanyId();
ctx.Customers.Single(o=>o.CustomerId = customerId and currentUsersCompanyId == customerId)
アクセス許可を制御する方法に基づいて、これを行うさまざまな方法があります。また、Apprenda などの .net 用のサード パーティ プラットフォームを使用すると、バックグラウンドでこれをより自動的に行うことができます。