0

webapi のデフォルトを使用して、JSON データを送受信できます。APIコントローラーが取得アクションを区別できないシナリオがあります

  • API/コントローラー?ポ番号=###
  • controller?id=### (または api/controller/###)

これを解決するために、ActionNameAttribute を使用しました

[ActionName("ById")]
public Model Get(PoByIdQuery model)
{
     return repo.Get(model);
}

[ActionName("ByPoNumber")]
public Model Get(PoByNumberQuery model)
{
     return repo.Get(model);
}

これにより、URLが次のように変更されます

  • /controler/byponumber?ponumber=###
  • /コントローラー/byid/###

問題は、値を取得するときに、text/html 型に使用できるフォーマッタがないということです。text/html リクエストに json フォーマッタを使用するように mvc4/webapi を構成するにはどうすればよいですか? または、html ではなく json を要求するように呼び出し要求を変更するにはどうすればよいですか?

4

1 に答える 1

0

解決済み

まず、ルーティングを追加する必要があります。デフォルトでは、webapi はアクションを無視します。アクションを含むルートを作成しました

routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{id}/{action}",
    defaults: new { action = "ById", id = RouteParameter.Optional });

次の問題はアクションの引数でした。この投稿によると。複合型は本体から取得され、単純型はクエリ文字列から取得されます。[FromUri]この動作をオーバーライドして、クエリ文字列から po 番号を取得するために使用できます。

副作用が 1 つありますが、今のところ対処できます。のパラメータを指定する必要があります{id}。だから私のURLはこのようになります

  • /api/controller/_/bynumber?ponumber=###
于 2012-08-13T22:50:51.440 に答える