2016-12-20 4 views
1

私はサイト上にWeb APIを持っています。 api呼び出しにパラメータがない場合、私はそれを打つことができますが、パラメータがあれば打つことはできません。以下は、私が話していることの例です。MVC APIの転記パラメータ発行

[HttpGet] 
public string GetFacilityName2() 
{ 
    return "Good"; 
} 

[HttpGet] 
public string GetFacilityName(string projectNumber) 
{ 
    return "Never Get Here"; 
} 

現時点では、設定ルートがデフォルトです。

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

私は次の2つのURLを使用しています。作品1のURLは私がこれをしたAPIの第三の方法を持っていたhttp://localhost/api/Controller/GetFacilityName?projectNumber=44

UPDATE で動作しないもののためにhttp://localhost/api/Controller/GetFacilityName2

URLです。

[HttpGet] 
public Address GetWorkplaceAddress(string projectNumber) 
{ 
    return new Address(); 
} 

これをAPIから削除すると、もう一方のメソッドが機能し始めました。アドレスはそのように定義されます。

public class Address 
{ 
    public int Id { get; set; } 
    public string AddressValue { get; set; } 
    public string City { get; set; } 
    public int? State { get; set; } 
    public string Zip { get; set; } 
    public int? Country { get; set; } 
} 
+0

コントローラでアクションをパラメータで過負荷にすることはできません。 RouteAttributeを使用して名前で実行するアクションを指定することも、Http動詞(Get、Post、Putなど)で指定することもできます。 – Igor

+0

コントローラーの各アクションには、それぞれ異なる名前が付けられています。上記の違いは、最後に「2」という文字になります。 – Nate

+0

あなたのルートテンプレートが名前を完全に無視する(すなわち、{アクション}はありません)、RouteAttributesがなく、使用されているHTTP動詞のキーを押さないものはありません。 – Igor

答えて

2

あなたのコードが現在どのように書き込まれているかによってコントローラ上のアクションをパラメータにオーバーロードすることはできません。あなたは

  • RouteAttribute
  • を使用して名前で発生したいアクションを指定することができます

    ルートテンプレートrouteTemplate: "api/{controller}/{action}/{id}",

ORは、HTTP動詞で、それを指定することができます(ゲット、ポスト、プットなど)を実行することができます。

+1

これは機能しました。私はそれを完全に見渡した。ありがとう – Nate

+0

@ネイト - それはあなたのために働いてうれしい。それを答えとして受け入れることを検討してください(「回答を受け入れる方法」(http://meta.stackexchange.com/a/5235)参照)。 – Igor

+0

システムが私に答えとしてそれを受け入れることができる前に私はまだ3分を得た。 – Nate