错误消息报告的问题是:
"尝试创建' BooksController'类型的控制器时发生错误。确保控制器具有无参数的公共构造函数。"
我试图让控制器成功执行和/或返回一个值。
这是一个使用AngularJs应用程序作为前端的WebApi项目。对此控制器的任何调用都会返回500错误,并显示上述消息。 我还要补充说我正在使用Insight.Database
我尝试过创建一个新控制器并添加和删除构造函数。但我无法更好地了解我做错了什么。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Data.SqlClient;
using System.Configuration;
using System.Threading.Tasks;
using Insight.Database;
using Owin;
using Microsoft.Owin;
using Microsoft.Owin.Security.OAuth;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.SqlServer;
using Wallet.Models.Books;
using Wallet.Models.Stores;
using Wallet.Models.Database;
namespace Wallet.Controllers
{
[Authorize]
[RoutePrefix("api/books")]
public class BooksController : ApiController
{
private IBooksDataAccess access;
public BooksController()
{
access = HttpContext.Current.GetOwinContext().Get<SqlConnection>()
.As<IBooksDataAccess>();
}
// POST api/books/GetActions
[HttpPost]
[Route("GetActions")]
public IList<HistoryAction> ActionsHH([FromBody] Dictionary<string, string> input)
{
var name = input["name"];
var results = access.GetHistoricalActions(name);
return results;
}
// POST api/books/InsertTransaction
[HttpPost]
[Route("InsertTransaction")]
public void InsertTx([FromBody] Dictionary<string, string> input)
{
}
}
}
这里是IBookDataAccess
namespace Wallet.Models.Database
{
[Sql(Schema = "Models")]
public interface IBooksDataAccess
{
IList<HistoryAction> GetHistoricalActions(string UserName);
int InsertTransaction(Dictionary<string, string> transaction);
}
}
答案 0 :(得分:0)
当控制器找不到无参数构造函数时,或者在构造函数中抛出异常的情况下,将发生此错误。看起来您正在使用Insight.Database,因为。作为扩展。
如果Insight无法生成动态程序集,它将抛出异常(您没有捕获,因为您在成员声明中实例化了insight自动界面构建器。)
我将不得不做一些测试,但我相信我记得将“事务”这个名称解释为T-SQL类型的问题。
您可以尝试为控制器创建构造函数,并在其内部的try / catch块内分配数据库对象吗?