没有找到与名为'某事物的控制器相匹配的类型。 MVC 5.2

时间:2017-07-04 09:03:11

标签: c# asp.net-mvc

我知道已经存在这样的问题了,但是由于旧的.NET MVC版本,上下文有很大差异。

我在localhost上点击路由No type was found that matches the controller named 'employee'时收到错误"/api/employee/5"。整个路线就像" 127.0.0.1:8080 / api / employee / 5"。主路线位于" 127.0.0.1:8080"按预期工作。

我在控制器中配置了路线。

EmployeeController.cs

[Route("api/employee")]
public class EmployeeApiController : Controller
{
    [HttpGet, Route("api/employee/{id}")]
    public ActionResult GetEmployee(long id) 
    {
        return Content(
            new Employee("Bobby", "Smedley",
                         "London", "Teheran",
                         EmployeeGender.M,
                         DepartmentCode.D_2157020,
                         "12345678901").ToString(),
            "application/json");
    }

}

我对WebApiConfig.cs没有做任何更改,看起来如下。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

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

有谁知道这有什么问题?

1 个答案:

答案 0 :(得分:1)

您正在混合框架。决定你想要哪一个。 MVC或Web API。

归属路由有效,因为它映射到默认的MVC路由。

从控制器的名称和配置的路由,这里假设您要使用Web API。

您已经配置了Web API,现在只需修复API控制器以从适当的类型派生。

[RoutePrefix("api/employee")]
public class EmployeeApiController : ApiController { // <-- Note: API controller
    [HttpGet]
    [Route("{id:long}")] //Match GET api/employee/5
    public IHttpActionResult GetEmployee(long id) { // <-- Note: return type
        var model = new Employee("Bobby", "Smedley",
                         "London", "Teheran",
                         EmployeeGender.M,
                         DepartmentCode.D_2157020,
                         "12345678901");
        return Ok(model);
    }    
}