我正在使用一个基本控制器的想法,该控制器使用通用存储库为我的API控制器提供基本的CRUD方法,这样我就不必在每个新控制器中复制相同的基本代码.但是,当它在基本控制器中时,会遇到路由属性被识别的问题.为了准确显示我遇到的问题,我创建了一个非常简单的WebAPI控制器.
当我在主控制器中有Get方法并且它直接从ApiController继承时,我没有任何问题,这可以按预期工作.
[RoutePrefix("admin/test")]
public class TestController : ApiController
{
[Route("{id:int:min(1)}")]
public string Get(int id)
{
return "Success";
}
}
Run Code Online (Sandbox Code Playgroud)
当我将Get方法移动到基本控制器时,它返回404页面的内容.
[RoutePrefix("admin/test")]
public class TestController : TestBaseController
{
}
public class TestBaseController : ApiController
{
[Route("{id:int:min(1)}")]
public string Get(int id)
{
return "Success";
}
}
Run Code Online (Sandbox Code Playgroud)
一些更有趣的笔记:
我可以在GET/Test/1上访问该操作.所以它仍然基于默认路线找到它.
当我尝试访问POST/admin/test时,它返回以下JSON
{"Message":"找不到与请求URI匹配的HTTP资源' http://test.com/admin/test'.","MessageDetail ":"找不到与名为'admin'的控制器匹配的类型. " }
有没有人知道如何让路由使用基本控制器的属性?
我有很少的控制器继承自相同的基类.在他们不相互分享的不同行为中,他们确实有一些完全相同.我希望在我的基类上有这些,因为它们都完全相同,只是它们通过不同的路径访问.
我应该如何用几种不同的路线定义这些行为?
我继承的类也有一个RoutePrefixAttribute集合,所以每个类都指向不同的路由.
我有一个叫做抽象基类Vehicle,然后继承Car,Bike,Bus等所有的问题都有共同行动Move()
/bus/move
/car/move
/bike/move
Run Code Online (Sandbox Code Playgroud)
如何Move()在我的基类上定义操作,Vehicle以便在每个子类路由上执行?
c# asp.net inheritance asp.net-web-api-routing asp.net-web-api2