2016-10-29 11 views
0

路線の違いは何か:私が使用している場合は、パラメータや他の方法を必要としないものがintergerパラメータを必要と...WebApiConfig&Iは、2つのGetメソッドを実装しているWebApiController

//Get api/<controller> 
    public IEnumerable<EmployeeVM> Get() 
    { 
     List<EmployeeVM> list = new List<EmployeeVM>() 
     { 
      new EmployeeVM(){ 
       FullName = "Milton Waddams" 
      }, 
     new EmployeeVM(){ 
       FullName = "Andy Bernard" 
      } 
     }; 
     return list; 
    } 

    //Get api/<controller> 
    public string Get(int id) 
    { 
     return "value"; 
    } 

は、私WebApiConfigクラスの設定、

configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); 

次、私は次のようなエラーになるだろう:

"The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.String Get(Int32)' in 'AngularForMVC.Controllers.EmployeeWebApiController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."

今、私はこの次の構成を使用する場合:

configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }); 

を、それが動作します。エラーなしでGet()メソッドを実行できます。

違いは何ですか? 2番目のコードリファレンスはなぜ機能しますか?私は、{アクション}をURLパスに追加したことを知っていますが、URLに{アクション}パスを含めなくても、これはまだ機能するはずです。

+0

Application.Startの実装をglobal.asax.csに表示できますか? MVCルート登録の前にWeb APIルート登録が呼び出されていることを確認してください。 – CodeNotFound

答えて

0

idパラメータにはnull可能なintを渡す必要があります。私はいつもカスタム[Route]はいくつかの理由のために良いだろう

https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

+0

null可能なパラメータは、2つの関数が同じWebメソッドを持っている場合には役に立ちません –

+0

彼が受け取ったエラーメッセージを指摘しました – Faisal

0

を取得

GET要求を行うことになっているものを識別するために、1-です。 たとえば、[Route("api/getlist")][Route("api/getitem/{id}")] の場合、これはわかりやすいでしょう。

2 - あなたは、あなたが今直面している問題に直面することはありません。

0

をroute.configに新しい役割を追加するよりも、私のルート設定を定義するには、[ルート]属性を使用して好む(int型?ID)

関連する問題