0

jsonp (Web サービス用) を取得するように応答を変更しようとしていますが、問題は write メソッドが呼び出されないことです。最後に flush() が呼び出されるだけで、URL は localhost:8080/api/employees です。

その呼び出し元の Web API と従業員はコントローラー ファイルです。

呼び出されるコントローラーメソッド

public List<Models.Employee> Get() {

            var employees = from e in _context.Employees
                            select new Models.Employee {
                                Id = e.EmployeeID,
                                FirstName = e.FirstName,
                                LastName = e.LastName
                            };


            return employees.ToList();

}

呼び出される IHTTPModule メソッド

public void OnReleaseRequestState(object sender, EventArgs e)
        {
            HttpResponse response = HttpContext.Current.Response;
            if (response.ContentType != JSON_CONTENT_TYPE && response.ContentType != JSON_CONTENT_TYPE1) return;

            //response.ContentEncoding =
           // char[] c = { 'd', 's', 'w', 'w' };

            response.Filter = new JsonResponseFilter(response.Filter);
            //response.Cache.
           // response.ClearContent();
           // response.Write(c, 0, 4);
           // response.Flush();
        }

現在、JsonResponseFilter.write は呼び出されていません。これが問題です。誰かが親切に返信して解決してください。

4

1 に答える 1

2

あなたはそれをすべて間違っています。IHttpModulesは使用しないでください。Web APIでこれを実現する正しい方法は、カスタムメディアフォーマッターを使用することです。たとえば、統合できるJsonpFormatterApplication_Startがあり、WebメソッドでJSONPを有効にします。

var config = GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());
于 2012-05-29T08:35:36.747 に答える