1

すべての Get Web api コマンドにいくつかの linq ステートメントを適用しようとしています。を使用してこれを行うことができると考えましたActionFilterAttribute

現在サポートされていないため、基本的に Web API に $select サポートを追加しています。結果がどこにあるのかわかりませんIQueryable。SQLの実行が発生する前に必要だと思いますが、Get関数がIQueryable結果を返した後です。どんな助けでも素晴らしいでしょう。私はこの投稿に似たようなことを試みていますが、彼のアイデアはHttpResponseMessage response = actionExecutedContext.Result;RC にないため機能しません。

ありがとうニック


解決

        public override void OnActionExecuted(System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
    {
        HttpRequestMessage request = actionExecutedContext.Request;
        HttpResponseMessage response = actionExecutedContext.Response;

        IQueryable obj;

        if (response != null && response.TryGetContentValue(out obj) && request.RequestUri.ParseQueryString()["$select"] != null)
        {

            System.Collections.Specialized.NameValueCollection QueryItems = request.RequestUri.ParseQueryString();
            string select = QueryItems["$select"];

            if (!string.IsNullOrWhiteSpace(select))
            {
                obj = obj.Select(string.Format("new ({0})", select));

            }

            //
            //this should be generic not hard coded for Json
            //
            string json = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);

            actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse();
            actionExecutedContext.Response.Content = new StringContent(json);
            actionExecutedContext.Response.Content.Headers.Clear();
            actionExecutedContext.Response.Content.Headers.Add("Content-Type", "application/json");
            actionExecutedContext.Response.StatusCode = System.Net.HttpStatusCode.OK;

        }


    }
4

1 に答える 1

0

上記の元の投稿を参照してください。ソリューションを一番下に追加しました。

于 2012-08-15T12:35:35.050 に答える