2016-05-18 3 views
4

APIコントローラには2つのgetのメソッドがあり、引数を受け入れないメソッドと整数の引数を受け入れるメソッドがあります。REST APIが間違った方法でコールを取得するのはなぜですか?

APIページのパスは/api/contactです。ここをナビゲートすると、ページが期待通りに表示されます。

しかし、/api/contact/4にパスを変更して整数引数を受け入れるgetメソッドを呼び出そうとすると、コードは代わりに引数なしで同じgetメソッドを呼び出します。私はブレークポイントとデバッグを入れることでこれを知っています。何がうまくいかないのですか?反射に基づく

public PhoneInfo[] Get() 
{ 
    return contactRepository.GetAllContacts(); 
} 

public PhoneInfo[] Get(int phn) 
{ 
    return contactRepository.GetMessages(phn.ToString()); 
} 
+1

あなたは、ルートテンプレートを登録していますか?もしそうでなければ、おそらくクエリ文字列のint値を期待しているでしょう。/api/contact?phn = 4 – tt9

答えて

3

WEBAPI作品これはあなたのglobal.asax /ルーティング・コンフィギュレーションに中括弧{VARSは}あなたの方法で同じ名前と一致しなければならないことを意味します。

デフォルトでは、あなたのglobal.asaxは、次のようになります。

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

idがVARとしてURLが存在するところしたがって上記に一致するようにする方法は次のように宣言する必要がありますapi/contact/{id}です:

public string Get(int id) 
     return "test"; 
    } 

あなたの例では、パラメータのデフォルト名をidからphnに変更しているため、WebApiはあなたのメソッドを見つけることができません。

別のオプションは、RouteAttributeを使用することができます。

[Route("api/contact/{phn}"), HttpGet] 
public string Get(int phn) 
    return "another value"; 
} 
関連する問題