让 Controller 从其BaseController继承路由是否“合法”?好像是not allowed for Attribute Routing,但是如何通过RouteCollection进行常规路由注册呢?

原因是我目前有一堆 Controller ,每个 Controller 代表某种文件转换器。他们每个人都有一套通用的方法来上传要转换的文件。这些方法不仅是私有(private)方法,而且是每个 Controller 上的端点。我希望以下路线有效:

/api/controller1/uploadfile
/api/controller2/uploadfile
/api/controller3/uploadfile

我能否举个例子,说明如何在BaseController内完成此操作,如果无法执行,请选择一个替代方法。

最佳答案

这是有效的方法:

public abstract class BaseUploaderController : ApiController
{
    [HttpGet, Route("uploadfile")] //Needs both because HttpGet("uploadfile") currently only supported in MVC attribute routing
    public string UploadFile()
    {
        return "UploadFile";
    }
}


[RoutePrefix("api/values")]
public class ValuesController : BaseUploaderController
{
    [Route("{id:int}")]
    public string Get(int id)
    {
        return "value";
    }
}

10-06 00:41