1

2 つの URL に応答する必要があるコントローラーを作成するためにマップする必要があります。

  1. "http://localhost/api/controller?id=1" (id 値のみ変更可能)
  2. 「http://localhost/api/controller/anotherId/someconst」(anotherId のみ変更部分)

私はそれをそのようなルートにマッピングします:

routes.MapHttpRoute("Test", "api/{controller}/{id}/{someconst}", new { controller = "Test", someconst = RouteParameter.Optional });

そして、コントローラーでメソッドを実行する必要があります:

public void Get(int id) { ... }
public void Get(int anotherId, string someconst ) { ... }

それは機能します...しかし、見た目は良くありません...「string someconst」はパラメーターではなく、単にURLのconst部分であるためです。しかし、「string someconst」パラメータを削除すると、2 番目の URL が機能しなくなります。実際には const である偽のパラメーターなしで明確にするために、この URL を解決するために 1 つのコントローラーを 2 つのルートにマップすることは可能ですか?

4

2 に答える 2

1

さて、私は答えを持っています...ただルーティングする必要があります...

routes.MapHttpRoute("Test", "api/{controller}/{id}", new { controller = "Test", action = "Get", id= @"\d+"); );

routes.MapHttpRoute("TestSomeConst", "api/{controller}/{anotherId}/someconst", new { controller = "Test", action = "GetSomeconst", anotherId= @"\d+"); 

コントローラーのメソッド (アクション) を変更します。

public void Get(int id) { ... } 
public void GetSomeconst(int anotherId) { ... } 
于 2012-06-29T13:54:35.237 に答える
0

試してみることができることの 1 つは、次のようにルートをマッピングすることです。

 routes.MapHttpRoute("Test", "api/{controller}/{id}/{action}", new { controller = "Test", action = "Get", id= @"\d+"} );

そしてあなたの行動をしてください:

 public void Get(int id) { ... }

 [HttpGet]
 public void Someconst(int id) { ... }

アクションのデフォルトは「Get」メソッドであるため、それを無視して次のように呼び出すことができます。

 http://localhost/api/test/1

他のメソッドを呼び出したい場合は、次を使用します

 http://localhost/api/test/1/someconst
于 2012-07-03T14:59:29.910 に答える