RealPath:
WebPath:
2017/09/03 13:57 (JST) 更新
ルーティング >>

パラメータ

Contents

アクションメソッドは URL リクエストによるパラメータを引数として受け取ることができる。

デフォルトでアクションが受け取れるパラメータ

デフォルトで記述されている以下の定義から見て取れる通り、デフォルトではアクションは id という名前のパラメータを受け取ることができる。

/Startup.cs
public class Startup
{
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");
        });
    }
}

id パラメータの受け取り

アクションメソッド定義に引数 id を付けることにより、その引数でパラメータを受け取ることができる。 引数名が重要 であり、上述の MapRoute()template で指定したパラメータ名以外の名前を付けると正常にパラメータを受け取ることができないことに注意。

/Controllers/HelloController.cs
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;

public class HelloController : Controller
{
    public IActionResult World(int? id)
    {
        Debug.WriteLine("id = " + id);
        return View();
    }
}

上記例ではhttp://..../Hello/World/10 のような URL アクセスにより、World() の引数 id に 10 が格納される。

この引数は null を許容するため、パラメータ指定が無い場合やパラメータ指定が無効であった場合、この引数 id は null となる。

例えば http://..../Hello/Worldhttp://..../Hello/World/ab のような URL アクセスでは id を int として解釈できないため、引数 id は null となる。

属性によるルート設定でパラメータを受け取る

Route 属性により指定するルート設定でパラメータを受け取ることもできる。

/Controllers/HelloController.cs
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;

public class HelloController : Controller
{
    [Route("~/sample/{hoge?}/{fuga?}")]
    public IActionResult World(string hoge, string fuga)
    {
        Debug.WriteLine("hoge = " + hoge);
        Debug.WriteLine("fuga = " + fuga);
        return View();
    }
}

上記のようなルート設定をした場合、http://..../sample/ab/cd のような URL アクセスがあったときに HelloController.World が呼び出され、World() の引数 hoge, fuga にはそれぞれ "ab", "cd" が格納される。

テンプレート内パラメータ指定の null 許容について

上述の例の [Route("~/sample/{hoge?}/{fuga?}")] のように、パラメータ指定子の後ろに ? を付けておくと、対象のパラメータは省略可能となり、省略した場合にはパラメータ値が null になる。

省略を許可しない(? を付けない)状態で URL でパラメータが省略した場合、そのルート探索は失敗し、サーバは 404 NOT FOUND 応答を返す。