3

MVC は初めてですが、MVC Web API を作成しようとしていますが、ルーティングに問題があります。

次の URL パターンを使用しようとしています。

/api/venue/1999          // doesn't work
/api/venue/1999/images/  // works

2 番目の URL パターンは正常に機能しますが、最初の URL パターンにアクセスしようとすると、次のようなエラーが表示されます。

要求に一致する複数のアクションが見つかりました: タイプ VenuefinderWebAPI.Controllers.VenueController の VenuefinderWebAPI.Models.Venue Get(Int32) System.String[] タイプ VenuefinderWebAPI.Controllers.VenueController の Images(Int32)

私のルーティングが間違っているのか (複数の一致)、それともコントローラー クラスの何かなのかはわかりません。どうすればこれを修正できますか?

私のwebApiConfigにはこれがあります:

config.Routes.MapHttpRoute(
    name: "VenueImages",
    routeTemplate: "api/venue/{venueID}/images/",
    defaults: new { controller="Venue", action = "images" }
);

config.Routes.MapHttpRoute(
    name: "VenueDefault",
    routeTemplate: "api/venue/{venueID}",
    defaults: new { controller = "Venue" }
);

VenueController.cs には次のものがあります。

// GET api/venue/5
public Venue Get(int venueID)
{
  // code
}

and 
[HttpGet]
[ActionName("images")]
string[] Images(int venueID)
{
   // code
}
4

2 に答える 2

3

you could try adding an action default, like this:

config.Routes.MapHttpRoute(
    name: "VenueDefault",
    routeTemplate: "api/venue/{venueID}",
    defaults: new { controller = "Venue", action = "Venue" },
    new { venueID = @"\d+" }
);

Note, i've also added a constraint on the venueID so it only matches integers

于 2012-10-05T09:31:35.813 に答える
3

これを試して...

会場コントローラーを変更します。

public string Get(int venueID)
{
    // code
}

[HttpGet]
public string[] Images(int venueID)
{
    // code
}

ルートを変更します:

config.Routes.MapHttpRoute(
    name: "VenueDefault",
    routeTemplate: "api/venue/{venueID}/{action}",
    defaults: new { controller = "Venue", action = "get" },
    constraints: new { venueID = @"\d+" }
);

*マイクの制約をルートに追加しました。

--- 上記の動作 ---
route は URL に一致します。ここで、venueID は数字であり、アクション メソッドは、特に指定がない限りデフォルトで get メソッドになります。

アクション メソッドはコントローラー内のメソッドであることに注意してください。

于 2012-10-05T10:00:23.960 に答える