2016-04-26 8 views
0

Web Apiで作業しています。デフォルトでは、api/{controller}/{id}がURLとして使用されます。 api/device/{controller}/{id}をルーティングすることができますが、これはそのパスへのすべてのWeb APIルートに影響します。Visual Studio Web API:ルーティングパスを変更する方法

しかし、私は特定のコントローラをapi/device/{controller}/{id}に置くだけで、残りは別のパスに移動します。

[RoutePrefix (api/data/abc)] where abc is the controller name. 

答えて

0

は、デフォルトのルートマップの前にWebApiConfig.csファイル内のカスタムルートマッピングを追加...私はRoutePrefixのようなものを見ましたが、動作していないよう:、前にこれを追加することにより すべての要求をカスタムルートと一致するものが実行され、それ以外の場合は実行されます。

config.Routes.MapHttpRoute(
      name: "CustomRoute", 
      routeTemplate: "api/device/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
+0

しかし、これはまだapi/abc/3と入力してもマップされますが、これはapi/device/abc/3の下にあるはずです。したがって、私がapi/abc/3と入力した場合、ページが見つからないはずです。 – LittleFunny

+0

あなたはチャットに来ることができますか? - https://chat.stackoverflow.com/rooms/110209/karthik-simon –

0

あなたはコントローラあたりアプローチとルーティングをカスタマイズしたい場合は、標準的な慣習に基づくルーティングの代わりにルーティング属性を使用する必要があります。

RoutePrefix属性を使用してコントローラを飾る、そしてこのようにRoute属性を持つあなたの行動:

[RoutePrefix("api/device/mydevice")] 
public class MyDeviceController : ApiController { 

    [Route("{id}")] 
    [HttpGet] 
    public IHttpActionResult Get(int id) { 
     //DoWork 
     //... 
    } 
} 

そしてHttpConfigurationオブジェクトのルーティング属性を有効にすることを忘れないでください:

config.MapHttpAttributeRoutes(); 

あなたはまた、削除することができますMapHttpRouteメソッドは、標準的な規約に基づいてアクションへのアクセスを許可したくない場合に呼び出します。

official documentationの属性ルーティングの詳細。

関連する問題