2015-11-19 23 views
6

私は2つの方法、1つはパラメータなし、2つは異なる種類のパラメータ(文字列とint)を持つWeb APIを持っています。文字列メソッドを呼び出すと、それは動作しません...私はここで何が欠けていますか?文字列パラメータを使用してWeb APIを呼び出す

public class MyControllerController : ApiController 
{ 
    public IHttpActionResult GetInt(int id) 
    { 
     return Ok(1); 
    } 

    public IHttpActionResult GetString(string test) 
    { 
     return Ok("it worked"); 
    } 
} 

WebApiConfig.cs:

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

マイコール:

/api/MyController/MyString //Doesnt work

/api/MyController/1 //work

私はエラーを以下の取得:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Http.IHttpActionResult GetInt(Int32)' in 'TestAngular.Controllers.MyControllerController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

は、私は私の要求に何をしないのですか?

+2

をWebAPIのWebMethod属性 –

+1

2つの異なるエンドポイントで同じルートを使用することはできません。メソッドGetIntが勝ち、両方の要求に使用されます。 – PinBack

+0

どうすればいいですか? routeTemplateに{action}を追加しますか? – MrProgram

答えて

7

あなたがメソッドを指定する必要はありませんあなたのURIの

/api/MyController 

/api/MyController/string 

/api/MyController/1 

を変更する必要があります。

詳細については、tutorialをasp.netでご覧ください。

+0

Iそのチュートリアルに従って、私のプロジェクトに適用しようとしましたが、私は働くことができませんでした。だから私はここに頼んでいる理由は、私は何かを逃している必要があります – MrProgram

+0

@emptymanそうあなたはこれらのURIを呼び出すしようとしなかった何か応答を得る? – Christos

+0

私は仕事をするためのintを持っていますが、どのように文字列パラメータを送信しますか?それは方法を見つけることができません(それはintを探します) – MrProgram

2

それはしばらくしているが、私は答えを持っていると思う:

はこちらを参照してください。 まず、2つの問題があります。まず、Pinbackが指摘するように、2つの異なるエンドポイントで同じルートを使用することはできません。

ただし、intメソッドを削除するだけで問題は解決します。 デフォルトルートは次のようになります:api/{controller}/{id} パラメータをバインドするには、 "test"ではなく "id"と呼ばなければなりません。

変更し、これに署名:

public IHttpActionResult GetString(string id) 

、それが動作します。 (webapiconfig.csファイルの{id}{test}に変更することもできます)。ここで

1

は私のソリューションです:webapiconfig.csにデフォルトルートを変更することなく、

を提出あなたの文字列関数にちょうどルートを追加:あなたは `を必要としない

[Route("Api/MyController/GetString/{test}")] 
public IHttpActionResult GetString(string test) 

http://localhost:49609/api/MyController/GetString/stringtest

関連する問題