2016-10-24 5 views
1

用がNameOfを使用してルートを取得する:私は例えば、アクションの絶対的なルートを取得しようとしていますアクション

public class HomeController : Controller { 

    [HttpGet] 
    public async Task<IActionResult> Index() { 
    return View(); 
    } 

} 

は、だから私は、次のオプションを試してみました:

var r1 = urlHelper.Action("Index", "Home", null, Request.Scheme); 

var r2 = urlHelper.RouteUrl(nameof(HomeController.Index), null, Request.Scheme); 

私は正しい、絶対に入手経路はr1ですが、r2はnullです。どうして?

RouteUrlのnameofをルートの名前として使用できませんか?

答えて

1

問題はnameof operatorではなく、ここでは2つの異なる機能を呼び出すということです。引数としてHomeController.Indexを指定したnameof演算子は、文字列"Index"に相当します。例えば

var r1 = urlHelper.Action("Index", "Home", null, Request.Scheme); 
var r2 = urlHelper.RouteUrl("Index", null, Request.Scheme); 

はこれと同じです:

var r1 = urlHelper.Action(nameof(HomeController.Index), "Home", null, Request.Scheme); 
var r2 = urlHelper.RouteUrl(nameof(HomeController.Index), null, Request.Scheme); 

nameofオペレータは、変数の単純(非修飾)は、文字列名を取得するために使用されています、タイプ、メンバー

実際に把握する必要があるのは、urlHelper.ActionurlHelper.RouteUrlとは異なる動作をする理由です。しかし、問題はnameofではありません。

+0

私は間違っているかもしれませんが、ActionとControllerの値を指定する代わりに、nameofを使用してActionまたはRouteUrlのnameofを使用して絶対ルートを取得することはできません。私はnameofがそのように使用されるだろうが。 –

+0

私の主張は、 'urlHelper.RouteUrl'は' nameof'を使用するかどうかにかかわらず動作しないということです。問題は 'nameof'ではなく' urlHelper.RouteUrl'関数の期待です。 –

関連する問題