私のTaghelper(asp.net core2.0)でActionのMethodInfoを取得する必要があります。コントローラ、アクション、(または多分エリア)の名前は私が持っている唯一のものです。起動時にすべてのアクションを取得する代わりに。実行時にリフレクションを使用するなど、アクションのMethodInfoを動的に取得する方法はありますか?あなたは次のように、属性のコレクションを構築することができasp.netコアmvcのコントローラとアクション名でActionのMethodInfoを取得するには?
0
A
答えて
0
:
publicstring GetHyperlinkAttributes<TEntity>(string name)
{
PropertyInfo property = typeof(TEntity).GetProperty(name);
object[] attributes = property.GetCustomAttributes(false);
var collection = new List<string>();
foreach(Attribute attribute in attributes)
{
var hyperlink = attribute as HyperlinkAttribute;
if(!string.IsNullOrEmpty(hyperlink?.Target)
return hyperlink.Target;
}
return String.Empty;
}
をしたがって、上記のためにあなたが属性を作成した場合、それはあなたがに渡されてきたオブジェクトのプロパティTarget
を探します指定されたプロパティのnameパラメータによるメソッド展開したい場合は、typeof(TEntity).GetProperties()
経由でオブジェクト全体をループすることができます。
ロジックを追加して、GetCustomAttributes
がプロパティのすべての属性を返すようにしました。したがって、キャストの行は、開発者が非HyperLinkAttribute
属性をフィールドに追加する場合に使用されます。これはきれいにすることができたが、私は落とし穴にあなたに警告したいと思った。
したがって、次の場合が存在します
[Target("https://microsoft.com")]
public string Example { get; set; }
上記の方法はhttps://microsoft.com
を返します。
ここで、難しい部分です。あなたのタグヘルパーです。
public class TargetTagHelper : TagHelper
{
public string DestinationName { get; set; }
public override Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
var url = GetHyperLinkAttributes<Navigation>(DestinationName);
output.Attributes.SetAttribute("href", url);
output.Content.SetContent(url);
}
}
したがって、上記のは、あなたの目標を達成しますが、いくつかの欠点があります。この例では
- を、私は、ナビゲーションと呼ばれるオブジェクトを作成します。
- プロパティを検索するには、適切な値をマークアップする必要があります。
- トラブルシューティングが難しく、属性またはオブジェクトが正しくマップされていないと、簡単に壊れてしまいます。
しかし、これらの制限は罰金であれば、それができるようにする必要があります
<target destination-name="Microsoft">Microsoft</target>
多少の誤差が、私はすぐにこれを書い存在することがあります。しかし、これは確実な出発点であるはずです。
関連する問題
- 1. ASP.NET MVC C#クラスのコントローラ名とアクション名を取得します
- 2. ASP.NET MVC - ヘルパーで現在のコントローラとアクション名を取得
- 3. ASP.Net Core MVCアプリケーションでアクションとコントローラの名前を取得するには?
- 4. ASP.NETのコントローラ/アクションでグローバルアクションフィルタをオーバーライドするコアMVC 1.0.1(ASP.NET Core 1.1)
- 5. のasp.net MVCで動的にコントローラ名とアクション名を割り当てる方法
- 6. ビュー内でコントローラのアクション名を取得
- 7. コントローラのアクションのASP.NETコア統合テスト
- 8. ASP.NET MVCアプリケーションでコントローラの名前とアクションをローカライズする方法は?
- 9. Asp.Net MVCコントローラ - アクションとビューのマッピングメタデータ
- 10. ASP.netコア(RC2):IPとユーザー名を取得
- 11. ASP.NET MVC:すべてのコントローラを取得
- 12. sailsjsコントローラ内のすべてのコントローラ名とアクション(メソッド)名を取得
- 13. ASP.NET MVC:別のアクション内でアクション出力を取得
- 14. ASP.NET MVC:アクションのコントローラのメソッドの基準?
- 15. Asp.Net MVCとAsp.Net両コアMVC
- 16. ASP.NET MVCコントローラのアクションの承認
- 17. ASP.NET MVCコントローラのアクションの設計
- 18. ASP.NET MVCコントローラのカスタムパラメータ変換アクション
- 19. ASP.NET-MVC3:コントローラのアクションのURLを取得する方法
- 20. asp.netコアMVCで最近ログインしたユーザーのリストを取得するには?
- 21. asp.netの同じコントローラとビューでの複数のアクションMVC
- 22. ASP.NET MVCでクライアントでユーザー名を取得
- 23. ASP.NET MVC - 一部のデータを渡してコントローラ/アクションにリダイレクトする
- 24. ASP.NET MVC 2.0 - コントローラ/アクションのカスタムエラーリダイレクトを無効にする
- 25. ASP.NET MVCコントローラのアクションに対するユーザーベースの権限
- 26. thunderdome action invoker asp.net mvc
- 27. プラグインのリルートリクエスト(モジュール、コントローラ、アクション名)を取得する
- 28. ASP.NET MVC 2すべてのアクションをあるコントローラから別のコントローラにリダイレクト
- 29. コントローラのプロパティASP.NETコア
- 30. ASP.NET MVC - アクションへのフルパスを取得する方法
あなたは何をしようとしていますか?アクションは、コントローラ内のメソッドになります。タグヘルパーを使用すると、サーバーサイドのコードでRazorファイルで要素を作成してレンダリングすることができます。 – Greg
私はHTMLの "a"タグを拡張しようとしています。タグヘルパーでは、asp-controller属性とasp-item属性を取得できます。私は自分のアクションにCustomAttributeを追加しました。今私は、このCustomAttributeを取得する必要があると思う、MethodInfoを取得することによって、与えられたコントローラとアクション名。 – jyshih
あなたのハイパーリンクにはどのようなメリットがありますか?または、リンクに記載されているメソッドに関連付けられているカスタム属性を使用しようとしていますか? – Greg