0

私は Visual Studi0 2010 を使用しています。構成のWebApiConfig.cs下にある私のファイルでは、これら 2 つの URL/Values/Values/1. 正常に動作しています。

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

/Values/Machinesやのようなカスタム URL が欲しかったので、/Values/Machines/100上記の設定を以下に変更しました。

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

現在、この URL 以外の URL の下にマッピングされています/Values/1。私が欠けているものを教えてください。

1./Values
2./Values/Machines
3./Values/Machines/100

ありがとう。

4

1 に答える 1

2

これは予期される動作です。新しいルートによると、最初のパラメーターValuesはコントローラー名であると予想され、2 番目のパラメーター1はアクションであると予想されますが、その名前のアクションはありません1

アクションに到達するには、次のような新しいルートの URL が必要です。/Values/Index/1

次のようなことができます。

routes.MapRoute(
    name: "IndexWithParam",
    url: "{controller}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    constraints: new { id = @"\d+" }
);

routes.MapRoute(
    name: "Default", // Route name
    url: "{controller}/{action}/{id}", // URL with parameters
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

この場合、Url が次のようなものである場合、/Values/1最初のルートにヒットして にリダイレクトされ/Values/Index/1ます。2 番目のパラメーターが数値であることを確認するために、このルートに制約を設定したことに注意してください。

于 2012-12-27T17:09:52.920 に答える