0

Web API に問題があり、標準のドキュメントはあまり役に立ちませんでした..

私は、クエリのためにいくつかの GET パラメータを受け入れるProductsControllerデフォルトのメソッドを持つ を持っています (その方法で実装する方が簡単でした)。GetAllProducts()

ここで、アプリケーションの別の部分で、jQuery オートコンプリート プラグインを使用します。このプラグインは、Web サービスにクエリを実行し、データをフィルター処理する必要があります。問題は、Web API によって返されるものとは異なるカスタム形式の結果が期待されることです。別のメソッド の作成に進みます。このメソッドはGetProductsByQuery(string query)、その形式でデータを返す必要があります。

別のコントローラーを作成せずに、必要に応じてデータを返すように WebAPI を強制する方法はありますか?

ルーティング テーブルにも問題があります。2 番目のメソッドをurl: "{controller}/query/{query}"

ここにいくつかのコードがあります:

public class ProductsController : ApiController {

    public IEnumerable<Product> GetAllProducts()
    {
        NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query);
        // Querying EF with the parameters in the query string

        return returnQuery;
    }

    [System.Web.Mvc.HttpGet]
    public dynamic GetProductsByQuery(string query)
    {
        return SomeCustomObject;
    }

そしてルーティング:

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

        routes.MapRoute(
            name: "Query",
            url: "{controller}/query/{query}");
4

1 に答える 1

1

ルートを入れ替える必要があります。2 番目のルートに一致するリクエストは、最初のルートに最初に一致します。

次に、データに特定の戻り形式が必要な場合は、カスタム メディア フォーマッタを調べます。

http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters

于 2013-08-25T16:28:44.323 に答える