2016-06-12 6 views
8

から、私はそれがURL mysite/api/My/Methodにマッピングされ、そして、私はそれが「API」接頭辞なしでURLをしたいのですが、デフォルトではAPIコントローラ削除「API」プレフィックスのWeb APIのURL

public class MyController : ApiController { ... } 

を持っています: mysite/My/Method

設定コントローラの属性[RoutePrefix("")]は私を助けませんでした。

これを達成する他の方法はありますか?

+2

'api'ワードは、WebApiConfig静的クラスのRegisterメソッドで設定されます。 – Fabio

+0

属性ルーティングまたはコンベンションベースのルーティングを使用していますか? – Nkosi

答えて

11

デフォルトの登録は、通常WebApiConfigに発見し、あなたが規則ベースのセットアップでrouteTemplateを編集する必要があり、この

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

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

のように見える傾向があります。

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

あれば、このプロジェクトはapiプレフィックスの理由は2つのフレームワーク間のルートの競合を避けるためだったとMVCと共有されていることに注意してください。唯一Web APIが使用されている場合、問題はありません。

+1

私はちょうどデフォルトのAccountControllerが '[RoutePrefix(" api/Account ")]'を持っていると言いますので、このコントローラでも同様に動作するためにここから 'api /'も削除する必要があります。 –

関連する問題