1. ホーム
  2. asp.net-mvc-4

[解決済み] ASP.NET Web API Urlを作成するには?

2022-09-05 23:31:13

質問

ASP.NET MVCにおいて @Url.Action をアクションのために使用します。のようなものはありますか? @Url.Api のように、/api/controllerにルーティングされるようなものはありますか?

どのように解決するのですか?

この ApiController というプロパティがあり URL というプロパティがあり、その型は System.Web.Http.Routing.UrlHelper を使用します。 というタイプで、APIコントローラ用のurlを作成することができます。

例を示します。

public class ValuesController : ApiController
{
    // GET /api/values
    public IEnumerable<string> Get()
    {
        // returns /api/values/123
        string url = Url.Route("DefaultApi", new { controller = "values", id = "123" });
        return new string[] { "value1", "value2" };
    }

    // GET /api/values/5
    public string Get(int id)
    {
        return "value";
    }

    ...
}

このUrlHelperは、ビューにも標準のコントローラにも存在しません。


UPDATEしました。

また、ApiControllerの外でルーティングを行うには、以下のようにすればよいでしょう。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string url = Url.RouteUrl(
            "DefaultApi", 
            new { httproute = "", controller = "values", id = "123" }
        );
        return View();
    }
}

またはビューの内部で

<script type="text/javascript">
    var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
    $.ajax({
       url: url,
       type: 'GET',
       success: function(result) {
           // ...
       }
    });
</script>

注目すべきは httproute = "" のルート・トークンに注目してください。これは重要です。

明らかに、これはあなたのApiルートが以下のように呼ばれることを想定しています。 DefaultApi の RegisterRoutes メソッドで Global.asax :

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);