基于不同路由的Web api动作选择

时间:2015-04-17 18:44:53

标签: c# asp.net asp.net-mvc asp.net-web-api

我有两个不同路径的api控制器:

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

        config.Routes.MapHttpRoute(
            name: "downloadApi",
            routeTemplate: "api/{controller}/{download}/{id}"
            );

我想对这些路线采取以下行动:

1 - 用于下载文件:public GetFile()

GET /api/v1/documents/download/id 

2 - 获取文件信息:public GetFileInfo()

GET /api/v1/documents/id

所以在我的控制器中我想要采取这些行动:

public class DocumentsController : apiController
{
    // triggers with GET /api/v1/documents/download/id 
    public HttpResponseMessage GetFile(){}

    // triggers with GET /api/v1/documents/id
    public HttpResponseMessage GetFileInfo(){}
 }

我该怎么做?

由于

1 个答案:

答案 0 :(得分:2)

以下是解释我的评论的一个例子。而不是在WebApiConfig.cs中定义适用于某些路线的路线,而不是其他路线(我认为你无法做到,但我从未尝试过,也许你可以这样做),而不是Route方法属性,用于定义方法级别使用的路由。

public class DocumentsController : apiController
{
    // triggers with GET /api/v1/documents/download/id
    [HttpGet]
    [Route("api/v1/documents/download/{id}")]
    public HttpResponseMessage GetFile(int id){}

    // triggers with GET /api/v1/documents/id
    [HttpGet]
    [Route("api/v1/documents/{id}")]
    public HttpResponseMessage GetFileInfo(int id){}
 }

未经测试,但应该有效