未找到与控制器名称匹配的类型

时间:2015-06-12 20:08:06

标签: asp.net asp.net-web-api2

我有臭名昭着的Web Api没有找到与控制器名称匹配的类型。我有这个Web服务工作,直到我们对文件系统和类进行了一些重组,现在我收到了这个错误。在访问同一解决方案中的类库中的数据类时,File系统默认与控制器和模型文件夹一起使用。我的路线没有改变,所以我不认为这是一个问题。

这是我的控制器:

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'."}

3 个答案:

答案 0 :(得分:1)

此网址:

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();
}

可以做&#34;命名&#34; WebAPI控制器中的操作,但我怀疑您可能需要为此添加路由。但默认情况下,它会寻找基于动词的操作(Get,Post等)。

答案 1 :(得分:0)

您的请求应该是GET

类型的/ api / MeterBlinks

答案 2 :(得分:0)

那是因为你写的是错误的网址。它应该是host and port + "/api/" + controller name + action name。在你的情况下将是:

//localhost:36819/api/MeterBlinks/GetBlinksByDateRange