呼び出す正しい方法を決定するための属性の適切な使用
-
30-09-2019 - |
質問
同じアクション名を使用して呼び出される2つのアクションメソッドがありますが、実際のパラメータータイプに応じて、どのメソッドを呼び出すべきかによって異なります。これは曖昧さを引き起こします。パラメーターがGUIDであり、適切な方法であるかどうかを決定する属性を作成しました。
[RequiredGuidParameter(ParameterName = "title")]
[ActionName("Title")]
public ActionResult Item_ById(Guid id)
{ ... }
[ActionName("Title")]
public ActionResult Item_ByName(string id)
{ ... }
属性は次のようになります:
public string ParameterName = string.Empty;
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
object parameter = null;
try
{
parameter = controllerContext.RouteData.GetRequiredString(ParameterName) as object;
if (parameter != null)
{
Guid guid;
return Guid.TryParse((string)parameter, out guid);
}
}
catch { }
parameter = controllerContext.RequestContext.HttpContext.Request[ParameterName] as object;
if (parameter != null)
{
Guid guid;
return Guid.TryParse((string)parameter, out guid);
}
return false;
}
究極の目標は、パラメーターがGUIDを実行している場合、そうでなければ次の方法を見つけることです。追加のルートを作成することを侵害しないより良い方法はありますか?それとも、おそらくより良い方法ですか?
解決
なぜ何かをしないのか:
public ActionResult Item_Search(string id, Guid guid)
{
if( string.IsNullOrWhiteSpace(id)
SearchById();
if( guid != new Guid() )
SearchByGuid()
}
non warranty'd psuedo code /
所属していません StackOverflow