32

WebApiConfig を次のように構成しました。

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

1 つのパラメーターを受け入れるメソッドが 1 つあります。アクセスURIはhttp://localhost:8598/api/WebApi/GetLocationCategory/87です。

これは私にエラーを与えます:No HTTP resource was found that matches the request URI 'http://localhost:8598/api/WebApi/GetLocationCategory/87'

コントローラ:

public IEnumerable<LocationCategory_CLS> GetLocationCategory(int CatID)
{
    var LocCats = (from lct in entities.tdp_LocationCategories join lc in entities.tdp_LocationMaster on lct.FK_LocationID equals lc.LocationID where lct.IsApproved == 0 && lct.FK_CategoryID == CatID select new { lc.LocationID, lc.LocationName }).ToList();
    List<LocationCategory_CLS> loc = new List<LocationCategory_CLS>();

    foreach (var element in LocCats)
    {
        loc.Add(new LocationCategory_CLS
        {
            LocationID = element.LocationID,
            LocationName = element.LocationName
        });
    }
    return loc;
}
4

4 に答える 4

23

Controller メソッドを次のように変更してみてください

public IEnumerable<LocationCategory_CLS> GetLocationCategory(int id) <-- Change
{
    var LocCats = (from lct in entities.tdp_LocationCategories join lc in entities.tdp_LocationMaster on lct.FK_LocationID equals lc.LocationID where lct.IsApproved == 0 && lct.FK_CategoryID == id select new { lc.LocationID, lc.LocationName }).ToList();
    List<LocationCategory_CLS> loc = new List<LocationCategory_CLS>();

    foreach (var element in LocCats)
    {
        loc.Add(new LocationCategory_CLS
        {
            LocationID = element.LocationID,
            LocationName = element.LocationName
        });
    }
    return loc;
}

変更は、入力パラメータをCatIdからid... に変更するだけです。私にとっては何度も機能します..

編集


長い時を振り返ってみると、今ならその理由がわかる気がしますWords Like Jared正解です。すべて指定したルーティングに関係しています。次のようなルート(デフォルト)がある場合:

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

そして、私の URL は です/MyController/GetLocationCategory/123。これは と同等になり/MyController/GetLocationCategory?id=123ます。

同様に、Id のパラメーター名を CatId に変更したい場合は、クエリ文字列パラメーターを変更する必要があります (コントローラー アクションを呼び出す方法が変わります)。これは次のようになります:

/MyController/GetLocationCategory?CatId=123

于 2013-03-30T09:21:49.027 に答える
2

リクエストURLはhttp://localhost:8598/api/WebApi/GetLocationCategory/87

ルートは「api/{controller}/{action}/{id}」を受け入れるように構成されています

したがって、コントローラーの名前が「WebApiController」であることを確認する必要があります。

また、@SDG で既に述べたように、アクション メソッドのパラメーターの名前が Route テンプレートにあるものと一致することを確認する必要があります。つまり、'CatID' を 'id' に変更します。

于 2013-05-22T14:04:59.830 に答える