ウェブAPI 2でサポートされているアプリケーションの開発を開始しました。これは、RESTfulな方法でデータを取得したかったからです。ウェブAPIルートとmvcルートを区別する
次に、管理者が提供された情報を管理できるように、サイトにHTMLを追加する必要があったため、MVC 5コントローラーでHTMLを返すように作成しました。今は、Web APIルートとMVCルートを区別し、可能であれば、運用中のWeb APIルートに影響を与えることはありません。
ウェブAPIルート:デフォルトルーティング:ここに衝突今
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults:
new {
controller = "Parking",
action = "Get",
id = RouteParameter.Optional
}
);
}
MVCのルートを解決しているだろう、私が最初にこれを開発した「API」プレフィックスを、削除された私のミス。 MVCコントローラ名はつまり、MVCルートが唯一
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Parking", action = "Get", id = UrlParameter.Optional }
);
}
問題は、MVCのルートはWebAPIのルートが最初に一致するので、一致する機会を持っていないということである投与部位のために意図され、管理されます。 の作業がまだ稼働していないため、MVCルートを変更する必要はありません。 ウェブAPIルートをそのまま保つ方が良いでしょう。
私が試した:MVCコントローラ用の接頭辞として「ウェブ」が、ルーティングを使用してWeb APIルートの登録とGlobal.asax.cs
- をメカニズムは "web"がコントローラであり、それが見つからないと思っています(Web APIのルーティングが再び勝つ)。
- 私はこの衝突を回避するための適切な制約を思い付くことができませんでした。
- ハードコード「管理」は、MVCルートパターンの「{コントローラ}」を置き換えます。
ここでは、衝突を解決するためのいくつかのトリックがありますか?
:
そして、私のRouteConfig:だから
、これは私のWebApiConfigですウェブAPIのために通常行われる処理。 web apiは通常、衝突を避けるために 'api'プレフィックスとmvcの前にマップを登録します。 mvcのプレフィックスを登録し、Web APIのルートの前にマップします。あなたはmvcの属性ルーティングを使用して試してみてください。 – Nkosi
私はそれを試してみましたが、うまくいきませんでした(質問で試したリストを参照してください) – Luis