【发布时间】:2015-01-15 13:07:21
【问题描述】:
我目前正在努力让 WebApi 中的继承像我想要的那样工作。 也许你能指出我正确的方向?
我的目标是拥有一个通用的 WebApi 项目,它可以在多个其他 WebApi 项目中重复使用。
例如:我有一个可重用的 UserController,它可以处理多个网站的登录。现在我建立了一个新的网站并将 UserController 添加到新创建的项目中,这很简单。
但现在新网站的需求发生了变化,我需要重载 UserController 方法以反映这些变化,而无需修改通用控制器。
我想要实现的可以在下面的代码sn-p中看到(当然这不会编译,因为C#抱怨找不到合适的方法来重载。)
// This belongs to solution "GenericWebApi"
public class LoginRequest
{
public string User { get; set; }
}
public class BaseApiController : ApiController
{
[Route("login")]
public virtual HttpResponseMessage Login(LoginRequest request)
{
return new HttpResponseMessage();
}
}
// This belongs to solution "CarWebsite"
public class CarWebsiteLoginRequest : LoginRequest
{
public string Car { get; set; }
}
[RoutePrefix("api/users")]
public class CarWebsiteApiController : BaseApiController
{
public override HttpResponseMessage Login(CarWebsiteLoginRequest request)
{
// Do some car specific login stuff
return base.Login(request);
}
}
我发现一个可行的解决方案是将“LoginRequest”和“CarWebsiteLoginRequest”替换为“dynamic”,但这感觉完全不对,ModelBinder 当然不会按预期工作。
你有什么想法可以解决这个问题吗?
提前致谢
【问题讨论】:
标签: c# asp.net .net asp.net-web-api asp.net-web-api2