2

こんにちは私はwebapiアプリケーションを開発しています.3つのGETメソッドが1つのコントローラにあります。私は2つのメソッドを呼び出すことができますが、私は呼び出すことができない3番目のメソッドを呼び出すことができます。1つのコントローラで3つのgetメソッドを呼び出す方法は?

以下は私が電話できる方法です。

[HttpGet] 
[Route("me")] 
public HttpResponseMessage me() 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me"); 
} 
URL:http://localhost:22045/api/user/me 

[HttpGet] 
public HttpResponseMessage getUser(int id) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get user"); 
} 

URL: http://localhost:22045/api/user/1 

以下を呼び出すことはできません。

[Route("user/{role}")] 
public HttpResponseMessage Get(string role) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
} 

私は

http://localhost:22045/api/user/OptionalRoleParameter 

が、私はここにいくつかの助けを得ることができますようにそれを呼び出すようにしたいですか?どんな助けもありがとう。

答えて

2

ルート制約付きの属性ルートを使用すると、衝突を避けるのに十分なルートを区別するのに役立ちます

まず、属性ルーティングが有効になっていることを確認します。

config.MapHttpAttributeRoutes(); 

は、次にコントローラが必要な属性を持っていることを確認してください

[RoutePrefix("api/user")] 
public class UsersController : ApiController { 

    //GET api/user/me 
    [HttpGet] 
    [Route("me")] 
    public HttpResponseMessage me() { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get me"); 
    } 

    //GET api/user/1 
    [HttpGet] 
    [Route("{id:int")] // NOTE the parameter constraint 
    public HttpResponseMessage getUser(int id) { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get user"); 
    } 

    //GET api/user 
    //GET api/user/OptionalRoleHere 
    [HttpGet] 
    [Route("{role?}")] //NOTE the question mark used to identify optional parameter 
    public HttpResponseMessage Get(string role = null) { 
     return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
    } 
} 

出典:

+0

ありがとうございます。出来た。 –

3

、詳細はこれを見ることがウェブAPIでNULL可能制約としてサポートされていないので、あなたは、オプションのパラメータとしてstringを持つことができません

[Route("user/{role?}")] 
public HttpResponseMessage Get(string role) 
{ 
    return Request.CreateResponse(HttpStatusCode.OK, "Get me on role"); 
} 

stringとしてオプションのルートパラメータ、 Route Constraints in Web API

+0

Attribute Routing in ASP.NET Web API 2 : Route Constraintsはありがとうございます。これを修正する方法はありますか? –

+0

あなたはカスタムルート制約を書くことができます。例は私が答えで与えたリンクで利用可能です –

関連する問題