ActionName의 목적


87

"ActionName"속성을 사용하여 작업 메서드의 별칭을 설정하면 어떤 이점이 있습니까? 사용자에게 다른 이름으로 작업 메서드를 호출 할 수있는 옵션을 제공한다는 점에서 그다지 이점이 없다고 생각합니다. 별칭을 지정한 후 사용자는 별칭을 사용해서 만 작업 메서드를 호출 할 수 있습니다. 그러나 이것이 필요한 경우 사용자가 별칭을 지정하는 대신 작업 메서드의 이름을 변경하지 않는 이유는 무엇입니까?

큰 이점을 제공 할 수 있거나 사용하는 것이 가장 좋은 시나리오에서 "ActionName"사용의 예를 제공 할 수 있다면 정말 감사하겠습니다.


가장 일반적인 이유는 GET 및 POST 메서드가 모두 있고 서명이 동일한 경우입니다. @Carlos 무 노즈 응답 참조
RickAndMSFT

답변:


132

번호로 작업을 시작하거나 .net이 식별자에 허용하지 않는 문자를 포함 할 수 있습니다. -가장 일반적인 이유는 동일한 시그니처를 가진 두 개의 작업을 허용하기 때문입니다 (스캐 폴딩 된 컨트롤러의 GET / POST 삭제 작업 참조).

예를 들면 : 당신은 당신의 URL 작업 이름에서 대시를 허용 할 수있는 http://example.com/products/create-producthttp://example.com/products/createproduct또는 http://example.com/products/create_product.

public class ProductsController {

    [ActionName("create-product")]
    public ActionResult CreateProduct() {
        return View();
    }

}

46
또한 Controller보기 또는 파일과 같이의 메서드 일 수있는 작업 이름을 사용할 수 있습니다 .
그램

@gram, 별칭을 지정하지 않고 컨트롤러에서 일반 메서드를 호출 할 수 없습니까? 나는 우리가 할 수 있다고 생각한다.
Hasan Fahim 2011-06-30

2
이름을 지정 하고 싶다면 현재 컨트롤러의 Action View()모든 참조가 기본 기본 메서드 View()Action아닌 해당 컨트롤러 로 해결되기 때문에 문제가 발생 합니다 . 따라서이 문제를 해결하려면 ActionName속성을 사용하여 View작업 을 허용 하지만 내부적으로 는 속성을 사용 PublicView하거나 이와 유사한 이름을 사용합니다.
빌드 시작

2
나는 당신이 return View("CreateProduct")또는 .NET이 create-product.aspx또는 같은 뷰를 찾지 못하는 것에 대해 잔소리 할 것이라고 생각합니다 create-product.cshtml. 적어도 내 코드는 이와 같이 작동합니다.
Achilles

@gram 그래서 어떻게하나요? 분명히 속성이 없습니다.
John

61

동일한 URL을 가져야하는 동일한 서명을 가진 두 개의 작업이있는 경우에도 유용합니다.

간단한 예 :

public ActionResult SomeAction()
{
    ...
}

[ActionName("SomeAction")]
[HttpPost]
public ActionResult SomeActionPost()
{
    ...
}

말이 되겠지만 어떤 시나리오에서 매개 변수없이 HttpPost를 사용합니까? JSON 반환 및 GET 보안 문제 방지와 같은 가능한 이유가 있음을 알고 있습니다. 나는 당신의 것이 무엇인지 궁금합니다.
regularmike

2
매개 변수 목록은 여기서 중요한 부분이 아닙니다. 더 나은 예가있을 수 있습니다. 요점은 필요한 경우 할 수 있다는 것입니다.
Carlos Muñoz

1
"SomeActionPost"를 "SomeAction"으로 바꾸면됩니다. 그러면 ActionName의 용도는 무엇입니까 ??
Jilani pasha

매개 변수가 동일한 경우 두 메소드의 이름을 동일하게 지정할 수 없습니다. 이 경우 [ActionName]은 ASP에 등록 된대로 메서드가 아닌 작업의 이름을 바꿉니다. NET MVC 경로 테이블을 의도 한 테이블로 변경합니다.
Carlos Muñoz

38

사용자가 보고서를 다운로드 할 때 사용하므로 CSV 파일을 Excel로 직접 쉽게 열 수 있습니다.

[ActionName("GetCSV.csv")]
public ActionResult GetCSV(){
    string csv = CreateCSV();
    return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" };
}

2
그것은 매우 영리합니다 :)
SRQ Coder

2

이 코드를 시도하십시오.

public class ProductsController
 {

    [ActionName("create-product")]
    public ActionResult CreateProduct() 
    {
        return View("CreateProduct");
    }

}

1

이 클래스는 작업의 이름에 사용되는 속성을 나타냅니다. 또한 개발자가 메서드 이름과 다른 작업 이름을 사용할 수 있습니다.


0

메서드 오버로딩을 구현해야 할 때도 유용합니다.

 public ActionResult ActorView()
        { 

            return View(actorsList);
        }


        [ActionName("ActorViewOverload")]
        public ActionResult ActorView(int id)
        {              
            return RedirectToAction("ActorView","Home");
        }
`

여기서 하나의 ActorView는 매개 변수를받지 않고 다른 하나는 int를받습니다. 첫 번째 방법은 배우 목록보기에 사용되며 다른 하나는 ID가 'id'인 항목을 삭제 한 후 동일한 배우 목록을 보여주는 방법입니다. 메서드 오버로딩이 필요한 곳이면 어디에서나 액션 이름을 'ActorViewOverload'로 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.