私は以下のように私のWeb APIコントローラに5つのアクションを持っています。web apiすべてのアクションのための単一のカスタムルーティング
http://localhost:1234/products
からsaveproduct
アクション(ポスト)
http://localhost:1234/products/1/getcolor
- - getproductcolorbyid
アクション
http://localhost:1234/products/1/getcost
からgetproductnyid
アクション
http://localhost:1234/products
マップする - getallproduct
アクション
http://localhost:1234/products/1
マップするgetproductcostbyid
アクション
を私は一つだけカスタムを必要としますこれをルーティングするURL。
私は以下のルーティングを試しましたが、私は望まないURL(http://localhost:24007/product/GetProductByID/Id
)にアクション名を追加しています。
[RoutePrefix("products")]
public class ProductsController : ApiController {
[HttpGet]
[Route("")]
public IHttpActionResult GetAllProduct()
{
//...
}
[HttpGet]
[Route("{productId}")]
public IHttpActionResult GetProductById(int id)
{
//...
}
[HttpPost]
[Route("")]
public IHttpActionResult SaveProduct(Product product)
{
//...
}
[HttpGet]
[Route("{productId}/getcolor")]
public IHttpActionResult GetProductColorById(int id)
{
//...
}
[HttpGet]
[Route("{productId}/getcost")]
public IHttpActionResult GetProductCostById(int id)
{
//...
}
}
そして、あなたのHttpConfiguration
オブジェクトに登録することを忘れないでください:として
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ProductRoute",
routeTemplate: "product/{action}/{productId}",
defaults: new { controller = "Product", productId= RouteParameter.Optional }
);
感謝を。要件に応じて、属性ルーティングを使用しないでください。 –
私は他のオプションがないことを恐れています。 –
getcolors、getcostなどのURLを使用しない理由を説明してください。 –