C# 基于不同路由的webapi动作选择

C# 基于不同路由的webapi动作选择,c#,asp.net,asp.net-mvc,asp.net-web-api,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(

我有一个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()

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

因此,在我的控制器中,我希望执行以下操作:

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(){}
 }
我该怎么做


谢谢

这里有一个例子来解释我的评论。与其在
WebApiConfig.cs
中定义适用于某些路由,但不适用于其他路由的路由(我认为您不能这样做,但我从未尝试过,也许您可以这样做),不如使用
route
method属性来定义在方法级别使用的路由

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){}
 }

未经测试,但它应该可以工作

我相信您必须通过定义每个方法的路由的方法属性来实现这一点。
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(){}
 }
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){}
 }