ASP .NET MVC ノンアクションの意味
-
29-10-2019 - |
質問
NonAction を使用する必要がある理由を誰か教えてください。つまり、いくつかの送信値を持つフォームがあるとします。更新、削除、または挿入。すべての送信ボタンは共通の同じフォームを持っているため、コントローラー内で送信値を切り替え、それに応じて動作します。
このような:
public ActionResult asd(string submitButton){
switch(submitButton){
case "Insert":
return Insert();
// bla bla bla
}
}
[NonAction]
public ActionResult Insert(){
// some code inside here
return View();
}
もう一度言いますが、なぜ次のようなものではなく NonAction を使用する必要があるのでしょうか。
public void Insert(){
// some code inside here
}
解決
NonAction
属性を省略できますが、その場合でも、このメソッドはアクションメソッドとして呼び出すことができます。
MSDNサイトから( ref ):
デフォルトでは、MVCフレームワークはコントローラークラスのすべてのパブリックメソッドをアクションメソッドとして扱います。コントローラクラスにパブリックメソッドが含まれていて、それをアクションメソッドにしたくない場合は、そのメソッドをNonActionAttribute属性でマークする必要があります。
他のヒント
を使用する必要があることに注意してください。 [NonAction]
パブリック メソッドにのみ適用されます。プロテクトメソッドとプライベートメソッドはアクションとして扱われません。あなた以来 Update
/Delete
/Insert
メソッドは次のヘルパーです asd()
, 、シナリオにはプライベート メソッドの方が適しています。
public ActionResult asd(string submitButton){
switch(submitButton){
case "Insert":
return Insert();
// bla bla bla
}
}
ActionResult Insert(){
// some code inside here
}
[ノンアクション]属性を使用しない場合、誰かが 'asd'関数を通過しなければならない代わりに直接行動を呼び出すことができます。
コントローラクラス内のパブリックメソッドは、URLを介して呼び出し可能です。
これを回避する必要があるかもしれません。たとえば、いくつかのインターフェイスを実装していても、Publicメソッドを呼び出したくない場合があります。
.public interface IEmployee { void Save(Employee e); bool Validate(Employee e); } public class EmployeeController:Controller, IEmployee { public void Save(Employee e){ } [NonAction] public void Validate(Employee e){ } }
特定のエンドポイントの配信を延期するという直前の決定があったため、Web APIで[NonAction]を使用して、一連のコントローラーメソッド(エンドポイント)を装飾しました。
したがって、APIエンドポイントの公開を避けたいが、後で実装を維持したい場合に便利です。
この属性を使用したので、時間を大幅に節約できました。
次のリリースで削除するだけで、これはそのままになります!
NonAction 属性により、ナビゲーション バーからアクションにアクセスできなくなります。たとえば、データベース内の項目を削除するアクションがある場合、 NonAction
属性を使用して、ユーザーがアクセスできないようにします。
まず、ActionResultは、MVCによって返される特定のタイプの構造として単純に考えてください。これは、MVCフレームワーク内でActionResultを内部的に処理する方法に関して特定の利便性を提供します。したがって、何かがActionResultであるという事実は、必ずしも「これは一般に公開されるべきである」という意味ではありません。 実際、 MVCコントローラーのパブリックメソッドは、ActionResultを返すかどうかに関係なく、アクションメソッドとして扱われます。
したがって、ActionResultではない戻り値の型を 持つだけでは、そのメソッドが、を介して呼び出すことができる公開されているアクションとして公開されるのを必ずしも防ぐことはできません。 URL。
URLを介して呼び出すことができるアクションとしてメソッドを公開したくない理由はたくさんあります。これに対して「保護」したい場合は、[NonAction]を使用します。]属性。
これは、コントローラーメソッドがアクションメソッドではないことを示しています。例:[NonAction] public void IndexTest(){//何かを行う}これは、コントローラーのメソッドの可視性をプライベートに変更できない場合に非常に便利な属性です。。
公衆アクセス修飾子によって定義されているメソッドで使用される属性です。実際にMVCフレームワークはすべてのパブリックメソッドをURLとして扱いますが、これを望んでいない場合は、action属性を使用してメソッドを飾る必要があります。方法をプライベートにすることによって同じことが達成されるかもしれません。
下記の属性の例を次に示します。 http://yogeshdotnet.com/non-action-attribute-in-mvc/
一部のアクションメソッドを呼び出したくない場合は、属性[NonAction]
でマークするか、プライベートにする必要があります
ジェネラコディセタグプレ
コードをコピーして貼り付け、結果を確認できます。ありがとうございます