我有一個基本控制器類,MyBaseController. 如何覆寫另一個繼承自的控制器類中的方法MyBaseController?每個控制器的視圖模型都不同。
public class MyBaseController<T> : ControllerBase where T : class
{
public VsBaseController()
{
}
[HttpGet]
public virtual async Task<IActionResult> GetAsync([FromQuery] string QueryParams)
{
return null;
}
[HttpDelete("{id}")]
public virtual async Task<IActionResult> DeleteAsync(int id)
{
return null;
}
[HttpPost]
[ServiceFilter(typeof(ValidationFilter))]
protected virtual async Task<IActionResult> CreateAsync(T ViewModel)
{
return null;
}
[HttpPut]
public virtual async Task<IActionResult> UpdateAsync(T ViewModel, int Id)
{
return null;
}
}
在后代控制器中,我有以下代碼:
[HttpPost]
public override async Task<IActionResult> CreateAsync(MyViewModel ViewModel)
{
var Response = await _MyService.New(ViewModel);
return Response;
}
在構建應用程式時,我收到以下錯誤:
CS0115:找不到合適的方法來覆寫
uj5u.com熱心網友回復:
您需要在派生的 Controller 中設定泛型型別,如下例所示:
public class MyBaseController<T> : ControllerBase where T : class
{
public MyBaseController()
{
}
[HttpGet]
public virtual async Task<IActionResult> GetAsync([FromQuery] string QueryParams)
{
return null;
}
[HttpDelete("{id}")]
public virtual async Task<IActionResult> DeleteAsync(int id)
{
return null;
}
[HttpPost]
// [ServiceFilter(typeof(ValidationFilter))]
protected virtual async Task<IActionResult> CreateAsync(T ViewModel)
{
return null;
}
[HttpPut]
public virtual async Task<IActionResult> UpdateAsync(T ViewModel, int Id)
{
return null;
}
}
所以如果你有一個 ViewModel 被呼叫MyModel,那么像這樣使用它:
public class MyModel
{
}
public class TestDerivedController : MyBaseController<MyModel>
{
public override Task<IActionResult> UpdateAsync(MyModel ViewModel, int Id)
{
return base.UpdateAsync(ViewModel, Id);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482049.html
