2017-07-04 9 views
2

既にこのような質問がありますが、コンテキストは古い.NET MVCバージョンのために非常に異なっている可能性があります。「何か」という名前のコントローラに一致するタイプが見つかりませんMVC 5.2

ローカルホームで"/api/employee/5"というルートを入力すると、エラーNo type was found that matches the controller named 'employee'が表示されます。全体のルートは「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

フレームワークを混合しています。あなたが望むものを決めてください。 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); 
    }  
} 
関連する問題