2015-06-12 2 views
1

У меня есть печально известный веб-сайт Api. Тип не найден, который соответствует имени контроллера. Я работал над этим веб-сервисом, пока не сделал небольшую реструктуризацию файловой системы и классов, и теперь я получаю эту ошибку. Файловая система по умолчанию используется с папками «Контроллеры и модели» при доступе к классу данных, который поступает из библиотеки классов внутри одного и того же решения. Мои маршруты не изменились, поэтому я не думаю, что это проблема.Не найдено ни одного типа, совпадающего с именем контроллера

Вот мой контроллер:

namespace CECC.Services.Controllers 
{ 
    public class MeterBlinksController : ApiController 
    { 
     // Will return all the meters for the date range with blinks >= minimum blinks passed. 
     public IEnumerable<JsonMeterBlinksModel> GetBlinks(string startDate, string endDate, int meterNumber) 
     { 
      return GetBlinksByDateRange(); 
     } 

     public IEnumerable<JsonMeterBlinksModel> GetBlinksByDateRange() 
     { 
      var conn = new Connection(); 
      List<JsonMeterBlinksModel> blinksCollection = new List<JsonMeterBlinksModel>(); 

      string queryString = 
       "select meteraccts.meternumber, t1.blinks, scemain.subname, feeder.feedername " 
       + "from(select serialnumber, sum(blinkcount) as blinks " 
       + "from cecc_processed_blinks " 
       + "where trunc(blinkdate) between to_date(:startDate, 'dd-mm-yy') and to_date(:endDate, 'dd-mm-yy') group by serialnumber) t1 " 
       + "left join meteraccts on t1.serialnumber = meteraccts.serialnumber " 
       + "left join serialnumber on t1.serialnumber = serialnumber.serialnumber " 
       + "left join scemain on serialnumber.subid = scemain.subid " 
       + "left join feeder on serialnumber.subid = feeder.subid and serialnumber.fdrid = feeder.fdrid " 
       + "where METERNUMBER is not null and SUBNAME is not null and FEEDERNAME is not null and t1.blinks >= 0 order by t1.blinks desc"; 



      conn.QueryInto<JsonMeterBlinksModel>(ref blinksCollection, queryString, null); 

      return blinksCollection; 
     } 

Вот мой маршрут:

config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 

И наконец, моя ошибка:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:36819/api/getblinks'.","MessageDetail":"No type was found that matches the controller named 'getblinks'."} 

ответ

1

Этот U RL:

http://localhost:36819/api/getblinks 

будет искать контроллер под названием GetBLinksController, который на самом деле не может быть найден. Я думаю, что вы хотите сделать это:

http://localhost:36819/api/meterblinks 

Вам также может понадобиться переименовать метод GetBlinks просто Get к карте на запрос GET по умолчанию:

public IEnumerable<JsonMeterBlinksModel> Get(string startDate, string endDate, int meterNumber) 
{ 
    return GetBlinksByDateRange(); 
} 

Вы можете сделать " названных «операций в контроллере WebAPI, хотя я подозреваю, что вам может понадобиться добавить для этого маршрут. Но по умолчанию он будет искать операции на основе глаголов (Get, Post и т. Д.).

0

Ваш запрос должен быть/API/MeterBlinks типа GET

0

Это потому, что вы пишете неправильный адрес. Это должно быть host and port + "/api/" + controller name + action name. В вашем случае это будет:

//localhost:36819/api/MeterBlinks/GetBlinksByDateRange 
Смежные вопросы