2017-02-13 6 views
2

私はこの作業を取得しようとしている:このhttp://localhost:55539/api/Default?name=ramiを呼び出すが、動作していないことでRoute属性を使用してWeb APIでクエリ文字列をバインドする方法はありますか?

[Route("api/Default")] 
public class DefaultController : ApiController 
{ 
    [HttpGet, Route("{name}")] 
    public string Get(string name) 
    { 
     return $"Hello " + name; 
    } 
} 

は、また、これを試してみました:http://localhost:55539/api/Default/Hello?name=ramiを、また、これは動作しない:ウェブAPI最初のルートテンプレートマッチングでhttp://localhost:55539/api/Default/Hello/rami

答えて

5

config.MapHttpAttributeroutes(); 

WebApiConfig.cs

で有効になっているApiControllerアクションに複数のルートを割り当てることができます。

[RoutePrefix("api/Default")] 
public class DefaultController : ApiController { 

    [HttpGet] 
    //GET api/Default 
    //GET api/Default?name=John%20Doe 
    [Route("")] 
    //GET api/Default/John%20Doe 
    [Route("{name}")] 
    public string Get(string name) { 
     return $"Hello " + name; 
    } 
} 

、あなたはインラインパラメータ外でURLを呼び出し、ルーティングテーブルは、それが慣習ベースで行われている方法に類似したクエリ文字列を使用できるようにすることができ、パラメータをオプションにするオプションは、もありますルーティング。

[RoutePrefix("api/Default")] 
public class DefaultController : ApiController { 

    [HttpGet] 
    //GET api/Default 
    //GET api/Default?name=John%20Doe 
    //GET api/Default/John%20Doe 
    [Route("{name?}")] 
    public string Get(string name = null) { 
     return $"Hello " + name; 
    } 
} 
1

をその後、アクション選択プロセスが発生します。

あなたのC#は、次のようにする必要があります:

public class DefaultController : ApiController 
{ 
    [HttpGet] 
    [Route("api/Default/{name}")] 
    public string Get(string name) 
    { 
     return $"Hello " + name; 
    } 
} 

今、このようにする必要があり呼び出す:属性は、ルーティングを確認してください

http://localhost:55539/api/Default/Get?name=rami 
関連する問題