ActionNameの目的


87

「ActionName」属性を使用してアクションメソッドのエイリアスを設定する利点は何ですか?他の名前でアクションメソッドを呼び出すオプションをユーザーに提供するという点で、実際にはあまりメリットがありません。エイリアスを指定した後、ユーザーはエイリアスを使用してのみアクションメソッドを呼び出すことができます。しかし、それが必要な場合、ユーザーがアクションメソッドのエイリアスを指定するのではなく、アクションメソッドの名前を変更しないのはなぜですか?

「ActionName」が大きなメリットをもたらす、または使用するのが最善のシナリオでの「ActionName」の使用例を誰かに教えていただければ幸いです。


最も一般的な理由は、GETメソッドとPOSTメソッドの両方があり、署名が同じである場合です。@CarlosMuñozの回答を参照してください
RickAndMSFT 2016年

回答:


132

数字でアクションを開始したり、.netで許可されていない文字を識別子に含めたりすることができます。-最も一般的な理由は、同じ署名を持つ2つのアクションを使用できることです(スキャフォールドコントローラーのGET / POST削除アクションを参照)

例:URLアクション名http://example.com/products/create-productvshttp://example.com/products/createproductまたはhttp://example.com/products/create_product。内にダッシュを許可できます。

public class ProductsController {

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

}

46
またController、ViewやFileなどのメソッドである可能性のあるアクション名を使用することもできます。
グラム

@gram、エイリアスを指定せずにコントローラーの通常のメソッドを呼び出すことはできませんか?できると思います。
Hasan Fahim 2011年

2
名前を付けたい場合は、現在のコントローラー内のAction View()すべての参照が、基になる基本メソッドView()Actionはなく、それに解決されるため、問題が発生します。したがって、これを回避するには、ActionName属性を使用してViewアクションを許可しますが、内部的にはそれPublicViewまたは同様のものを呼び出します。
ビルドは2011年

2
私はあなたが持っていると思うreturn View("CreateProduct")か、.NETをなどについて見解を見つけないガミガミだろうcreate-product.aspxか、create-product.cshtml少なくとも、私のコードは次のように動作します- 。
アキレス

@gramでは、どうやってそれを行うのですか?明らかに属性はありません。
ジョン

61

同じURLを持つべき同じ署名を持つ2つのアクションがある場合にも役立ちます。

簡単な例:

public ActionResult SomeAction()
{
    ...
}

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

理にかなっていますが、どのようなシナリオでパラメーターなしでHttpPostを使用しますか?JSONを返す、GETのセキュリティ問題を回避するなど、考えられる理由があることはわかっています。私はあなたが何であるか疑問に思っています。
レギュラーマイク2014年

2
ここでは、パラメータリストは重要な部分ではありません。より良い例があるかもしれません、ポイントはあなたが必要ならそれをすることができるということです。
カルロス・ムニョス

1
「SomeActionPost」を「SomeAction」に置き換えることでそれを行うことができます。それでは、ActionNameの使用は何ですか?
ジラニパシャ2018年

パラメータが同じ場合、両方のメソッドに同じ名前を付けることはできません。この場合、[ActionName]は、ASPに登録されているアクション(メソッドではない)の名前を変更します。目的のルートへのNETMVCルートテーブル。
カルロス・ムニョス

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コーダー2016年

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.