2012-08-22 18 views
10

私はちょうど、私はブラウザでhttp://localhost:51416/api/getを入力しますが、エラーを取得することにより、get()はメソッドを呼び出すようにしようとしていたasp.net MVC 4アプリケーションを作成し、デフォルトのWEBAPIコントローラにWebApiコントローラメソッドを呼び出す方法は?

public class UserApiController : ApiController 
{ 
    // GET api/default1 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    // GET api/default1/5 
    public string Get(int id) 
    { 
     return "value"; 
    } 

    // POST api/default1 
    public void Post(string value) 
    { 
    } 

    // PUT api/default1/5 
    public void Put(int id, string value) 
    { 
    } 

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

を追加しました:

<Error> 
<Message> 
No HTTP resource was found that matches the request URI 'http://localhost:51416/api/get'. 
</Message> 
<MessageDetail> 
No type was found that matches the controller named 'get'. 
</MessageDetail> 
</Error> 

私のルートの設定:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

それは、デフォルトでは動作しないのはなぜ? これを修正するために何ができますか?

答えて

8

GETはHTTP動詞の種類なので、getをURLに入れる必要はありません。

URLを入力すると、ブラウザはデフォルトでGETリクエストを送信します。

だから、あなたは、ルーティングの設定で、あなたのルートを指定するときは、「コントローラ」のサフィックスを必要としない

注意をラインdefaults: new { controller = "UserApiController"...のコメントを解除した場合、デフォルトのAPIコントローラですhttp://localhost:51416/api/

UserApiControllerのででそれを試してみてくださいそう正しいdafaults設定は次のとおりです。defaults: new { controller = "UserApi", id = RouteParameter.Optional }

または明示的にコントローラhttp://localhost:51416/api/userapi

を指定する必要があります

ASP.NET Web API siteでWep.APIとHTTP動詞ベースのルーティング規則について学習することができます。

+0

は、http:// localhost:51416/apiが取得しようとしていました。リソースが見つかりません。 'http:// localhost:51416/api/userapi'は動作しています:)。 'http:// localhost:51416/api'ルートを修正するには? – Kuncevic

+0

'http:// localhost:51416/api'の作業**をコメントアウトするには、この行をルーティングから削除するには、default:new {controller =" UserApiController "、id = RouteParameter.Optional}コントローラ – nemesv

+0

は 'defaults:new {controller =" UserApiController "、id = RouteParameter.Optional}'と結びついていましたが、依然としてリソースが見つかりません。 'localhost:51416/api /' – Kuncevic