2015-04-17 3 views
0

Проблемы, сообщаемые сообщения об ошибке:Использование WebAPI контроллера

«при попытке создать контроллер типа„BooksController“Произошла ошибка Убедитесь, что контроллер имеет без параметров открытого конструктора.. "

Я пытаюсь, чтобы контроллер успешно выполнил и/или вернул значение.

Это проект WebApi с использованием приложения AngularJs в качестве интерфейса. Любые вызовы этого контроллера возвращают ошибку 500 с указанным выше сообщением. Ishould также добавить, что я использую 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

Возможно дублирующийся вопрос. То же самое обсуждалось здесь. Http://stackoverflow.com/questions/24014644/make-sure-that-the-controller-has-a-parameterless-public-constructor Вы пытались установить эту ссылку? – Vim

+0

Прошу прощения, я поставил неправильный код. Однако ошибка сохраняется независимо от того, существует или нет конструктор. –

+0

@Vim Я столкнулся с этим во время поиска, но даже после добавления конструктора (пустой или нет) ошибка все еще происходит. –

ответ

0

Эта ошибка возникает, когда контроллер не может найти параметр меньше конструктор, или в случае, когда исключение в конструкторе. Похоже, вы используете Insight.Database, учитывая расширение .As.

Если Insight не удастся создать динамическую сборку, то будет сгенерировано исключение (которое вы не ловить, так как вы экземпляр проницательность автоматического интерфейс строителя в вашем объявлении члена.)

мне придется сделать некоторые но я считаю, что у меня возникают проблемы с именем «транзакция», которое интерпретируется как тип T-SQL.

Можете ли вы попытаться создать конструктор для своего контроллера и назначить объект базы внутри блока try/catch внутри него?

+0

Вот и все! Имена свойства интерфейса вызывали ошибку. –