MVC 5 Web Api - 从基本控制器继承路由

par*_*ent 5 asp.net-mvc asp.net-web-api

让控制器从其继承路由是"合法的" BaseController吗?它似乎不允许进行属性路由,但通过正常的路由注册怎么样RouteCollection

原因是我目前有一堆控制器,每个控制器代表某种文件转换器.它们中的每一个都有一组通用的方法来上传要转换的文件.这些方法是每个控制器上的端点,而不仅仅是私有方法.我希望以下路线有效:

/api/controller1/uploadfile
/api/controller2/uploadfile
/api/controller3/uploadfile
Run Code Online (Sandbox Code Playgroud)

我可以举一个例子,说明如何在BaseController中完成这项工作,如果不可能,可以选择其他方法.

Kir*_*lla 1

您是否希望将此UploadFile操作放在基本控制器中,并且从它们继承的其他控制器仍然应该能够UploadFile像您在帖子中提到的那样从各自的路线进行点击?如果是,您可以创建一个抽象基础 api 控制器并将此UploadFile操作放入其中,并且您对各个控制器的请求应该按预期工作。

例子:

public abstract class BaseApiController : ApiController
{
    // POST /api/Values
    // POST /api/Test
    public string UploadFile()
    {
        return "UploadFile";
    }
}

public class TestController : BaseApiController
{
    // GET /api/test/10
    public string GetSingle(int id)
    {
        return "Test.GetSingle";
    }
}

public class ValuesController : BaseApiController
{
    // GET /api/values/10
    public string GetSingle(int id)
    {
        return "Values.GetSingle";
    }
}
Run Code Online (Sandbox Code Playgroud)