2015-12-06 51 views
1

我有我的WebAPI項目的示例控制器:的WebAPI控制器未發現

public class MilestonesController : ApiController 
{ 
    // GET api/milestones 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "M#1", "M#2" }; 
    } 

    // GET api/milestones/5 
    public string Get(int id) 
    { 
     return "M with {id}"; 
    } 

    // POST api/milestones 
    public void Post([FromBody]string value) 
    { 
    } 

    // PUT api/milestones/5 
    public void Put(int id, [FromBody]string value) 
    { 
    } 

    // DELETE api/milestones/5 
    public void Delete(int id) 
    { 
    } 
} 

如果我試圖找到它:

http://localhost:59493/api/milestones

我總是得到錯誤:

No HTTP resource was found that matches the request URI 'http://localhost:59493/api/milestones'. 

No type was found that matches the controller named 'milestones'. 

預先感謝您!

編輯:

我WebApiConfig:

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

的Global.asax:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 

可能的解決方案:

我已經刪除了我的項目,我已經創建了一個新的一個(WebAPi項目),現在它工作。 WebApiConfig等是一樣的,所以我真的不知道我的第一次嘗試有什麼問題

+0

是否可以從Global.asax.cs中添加App_Start()方法? –

+0

當WebApiConfig存在時缺少web-api路由通常是因爲它們沒有在App_Start()(或其他方法)中連線。如果您將Web api添加到現有的mvc應用程序,則會添加WebApiConfig,但不會連線。因此,請求App_Start –

+0

嘗試註釋掉'GlobalConfiguration.Configure(WebApiConfig.Register);'或'WebApiConfig.Register(GlobalConfiguration.Configuration);' –

回答

0

你錯過了從你的路線URL的'api'部分。嘗試更類似的東西;

routes.MapHttpRoute(
    name: "API Default", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
0

看看你在哪裏創建了控制器。也許它不在Controllers文件夾中,不同的命名空間或該控制器類嵌套到另一個類中

+0

它沒有'爲我工作。 WebApi項目已經爲我添加了這個類 – GrayFox

+0

@GrayFox所以,你應該已經有了這個配置,你可以發佈你的WebApiConfig和App_Start()嗎? –

+0

@GrayFox,你可以再次看看你的控制器嗎? –