programing

ASP.NET MVC 비동작 의미

cafebook 2023. 8. 21. 21:37
반응형

ASP.NET MVC 비동작 의미

누가 제가 왜 그것을 사용해야 하는지 말해줄 수 있나요?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
}

하크의 기사 읽기

컨트롤러 클래스의 모든 공용 메서드는 URL을 통해 호출할 수 있습니다.

때로는 이 문제를 피해야 할 수도 있습니다.예를 들어, 일부 인터페이스를 구현하고 해당 공용 메서드를 호출하지 않을 경우 다음과 같이 표시할 수 있습니다.NonAction

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){
  }
}

웹 API에서 [NonAction]을(를) 사용하여 여러 컨트롤러 메서드(엔드포인트)를 장식했습니다. 특정 엔드포인트의 제공을 연기한다는 최종 결정이 있었기 때문입니다.

따라서 API 끝점의 노출을 방지하고 나중에 구현을 유지하려는 경우 유용합니다.

그래서 저는 이 속성을 사용했고 많은 시간을 절약했습니다.

다음 릴리스에서 제거하기만 하면 됩니다!

[NonAction] 속성을 사용하지 않으면 누군가가 'asd' 기능을 거치지 않고 직접 사용자의 작업을 호출할 수 있습니다.

NonAction 특성을 사용하면 탐색 모음에서 작업에 액세스할 수 없습니다.예를 들어 데이터베이스의 항목을 삭제하는 작업이 있는 경우 다음을 추가해야 합니다.NonAction사용자가 액세스할 수 없도록 만드는 속성입니다.

먼저 ActionResult를 MVC에서 반환되는 특정 유형의 구조물로 단순하게 생각합니다. MVC 프레임워크 내에서 ActionResult를 내부적으로 처리할 수 있는 방법의 측면에서 특정한 편의를 제공합니다.따라서 어떤 것이 실행 결과라는 사실이 반드시 "이것이 공개적으로 이용 가능해야 한다"는 것을 의미하지는 않습니다.실제로 MVC 컨트롤러의 모든 공개 메서드는 ActionResult를 반환하는지 여부에 관계없이 액션 메서드로 처리됩니다.

따라서 ActionResult가 아닌 반환 유형을 갖는 것만으로는 해당 메서드가 URL을 통해 호출될 수 있는 공개적으로 사용 가능한 작업으로 노출되는 것을 방지할 수 없습니다.

URL을 통해 호출할 수 있는 액션으로 메서드를 노출하지 않으려는 이유는 여러 가지가 있을 수 있으며, 이에 대해 '보호'하려는 경우에는 [NonAction'] 특성을 사용합니다.

이는 컨트롤러 메서드가 작업 메서드가 아님을 나타냅니다.예: [NonAction] public void IndexTest() { // Do something } 컨트롤러 메서드의 가시성을 비공개로 변경할 수 없는 경우 매우 유용한 특성입니다.

동작 " 일작업메를드호않지출속면합표성니시다야해"로 .[NonAction]로 하거나 .

public ActionResult Index(){
    return View();
}

[NonAction]
public ActionResult Countries(List<string>countries){
    return View(countries);
}

당신은 코드를 복사해서 붙여넣고 결과를 볼 수 있습니다. 감사합니다.

언급URL : https://stackoverflow.com/questions/6385599/asp-net-mvc-nonaction-meaning

반응형