簡體   English   中英

路由可選參數

[英]Routing optional parameters

我正在使用我的第一個Web API,但仍在嘗試為這些網址創建規則

1) http://mydomain.com/values/4 --> this number can be any, this is just an example
2) http://mydomain.com/values/
3) http://mydomain.com/values/?param1=test1&param2=test2
4) http://mydomain.com/values/?param1=test1
5) http://mydomain.com/values/?param2=test2

我當前的路由規則是

routes.MapHttpRoute(
    name: "Route1",
    routeTemplate: "{controller}/{id}/"
);
routes.MapHttpRoute(
    name: "Route2",
    routeTemplate: "{controller}/{param1}/{param2}",
    defaults: new { param1 = RouteParameter.Optional, param2 = RouteParameter.Optional }
);

我提供這些網址的方法

// GET values/
// GET values/?param1=test1&param2=test2
// GET values/?param1=test1
// GET values/?param2=test2
public IEnumerable Get(string param1, string param2)
{
    return new string[] { "value1", "value2" };
}

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

我有2個問題

1) http://mydomain.com/values/無法解析

2)無法解析http://mydomain.com/values/?param1=test1http://mydomain.com/values/?param2=test2

您能幫我創建用於提供這些網址的路由嗎?

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

應該做你所需要的。 只要查詢字符串參數的名稱相同,它們就已經映射到Action參數,而無需在路由中添加它們。

首先,您不需要路線

routes.MapHttpRoute(
  name: "Route2",
  routeTemplate: "{controller}/{param1}/{param2}",
  defaults: new { param1 = RouteParameter.Optional, param2 = RouteParameter.Optional }
);

其次,要解析http://mydomain.com/values/您需要通過將其設置為int?來使參數id可選int?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM