2017-02-14 13 views
0

Web Apiのルート設定については、非常に簡単な質問があります。追加パラメータを使用したルート設定のチャレンジ

私の目標は、2つのメソッドを1つにマージすることです。

[HttpGet] 
[Route("foo/bar")] 
public HttpResponseMessage TestMethod() 
{ 
    //TODO: Implement 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 



[HttpGet] 
[Route("foo/bar/{element}")] 
public HttpResponseMessage AnotherTestMethod(string element) 
{ 
    //TODO: Implement 
    return new HttpResponseMessage(HttpStatusCode.OK); 
} 

上記のコードが貼り付けられています。

もちろん、経路のカスタマイズに関するチュートリアルを読んだことがありますが、私は成功しませんでした。文字列要素はオプションです。

これは私がRouteConfigにしようとしたものです:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "MyController", action = "DefaultTestMethod", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "PropertyDefinitions", 
      url: "foo/bar/{element}", 
      defaults: new { controller = "MyController", action = "TestMethod", element = UrlParameter.Optional} 
     );   
    } 
} 

は、任意のヒントやヘルプをありがとうございました。

答えて

1

elementのデフォルト値を割り当てることができます。そして、ルートパラメータで、変数をnullableとして宣言します。これは、パラメータをオプションとして扱います。

[Route("foo/bar/{element?}")] 
public HttpResponseMessage TestMethod(string element = null) 
+0

ありがとうございます!それはとても簡単でした:-)。 – Mozartos

0

なぜ以下の1つの方法を使用しないのですか?あなたが知られているように

[HttpGet] 
[Route("foo/bar/{string element}")] 
public HttpResponseMessage TestMethod(string element) 
{ 
//TODO: Implement 
return new HttpResponseMessage(HttpStatusCode.OK); 
} 

は、要素のパラメータが設定され設定されていないかに関係なく、のtestMethod()が呼び出されます。

+0

ありがとうございました。しかし、それは動作しません:-(または、おそらく私はあなたのポイントが表示されません。 – Mozartos

関連する問題