asp .net MVC 中没有为此对象错误定义无参数构造函数

No parameterless constructor defined for this object error in asp .net MVC

大家好,我遇到了这个错误。我的项目很简单,我有一个名为“IApiService”的接口,还有一个名为 Api 的 class,它与我的 IApiService 接口相关。所以在“Api”中我有一个 post 和 api 的方法,我认为这个错误与我的错误无关。我认为错误出在我的控制器中。所以我会把我的控制器代码放在一起,这样你们就可以帮助我了! 这是:

public class HomeController : Controller
    {
        IApiService _apiService;
        public HomeController(IApiService apiService)
        {
            _apiService = apiService;
        }
        // GET: Home
        public async Task<ActionResult> Index(CheckOutViewModel model)
        {
            var result = await _apiService.CheckOut(model);
            return View();
        }
    }

对于asp.net框架:

区别在于你应该有这样的控制器,不需要注入依赖:

public class HomeController : Controller
{
    IApiService _apiService;

    public HomeController() : this(new ApiService())
    {
    }

    public HomeController(IApiService apiService)
    {
        _apiService = apiService;
    }

    public string getString(string name) {
        string a = _apiService.CheckOut(name);
        return a;
    }
}

============================================= =

请允许我在这里展示一个示例,asp.net核心。

我的控制器:

public class HomeController : Controller
{
    private readonly IApiService _apiService;

    public HomeController( IApiService iapiService)
    {
        _apiService = iapiService;
    }
    
    public string getString(string name) {
        string a = _apiService.CheckOut(name);
        return a;
    }
}

我的界面:

namespace WebMvcApp.Services
{
    public interface IApiService
    {
        public string CheckOut(string str);
    }
}

我的接口实现:

namespace WebMvcApp.Services
{
    public class ApiService: IApiService
    {
        public string CheckOut(string str)
        {
            return "hello : " + str;        
        }
    }
}

I inject the dependency 在 startup.cs -> ConfigureServices 方法中:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddScoped<IApiService, ApiService>();
}

或在 Program.cs 文件中的 .net 6 中:

builder.Services.AddControllersWithViews();
builder.Services.AddScoped<IApiService, ApiService>();