0

考えられるすべてのデバッグを実行しましたが、何が起こっているのか正確に一致するものを見つけることができません。これがコードです。全体として、栄光/愚かさをデバッグしています。

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult ConciergeRead([DataSourceRequest] DataSourceRequest request)
{
    var concierges = GetConcierges();
    var sorted = concierges.ToDataSourceResult(request);
    var json = Json(concierges, "text/x-json");
    string jsonString = new JavaScriptSerializer().Serialize(json.Data);
    var json2 = Json(sorted, "text/x-json");
    return json;
}

このToDataSourceResultビットは、MVC の Telerik 拡張機能である Kendo-UI の一部ですが、Kendo-UI ビットを除外しても問題は解決しません。Ajax リクエストであろうと、ブラウザでの直接の GET であろうと、呼び出し元のブラウザに関係なく、空でないレスポンスを返すルートを取得できません。常に同じことが起こります。応答本文がありません。応答ヘッダーはありますが、本文のデータは 0 バイトです。

これは、スムーズに動作している Active Directory ログイン統合を使用してローカルで実行されています (ログインしないと、親ルートで禁止され/mvc/123/concierges、Ajax ルートに直接ヒットすると)。サーバーは、Visual Studio 2012 で起動された IIS Express 8.0 です。

応答ヘッダー

HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcTGVhZE1hc3RlclxMYXRlc3RccGxhdGZvcm1cTGVhZE1hc3RlclBsYXRmb3JtXEF3bC5MZWFkTWFzdGVyLk12Y1wxMjNcY29uY2llcmdlc1xDb25jaWVyZ2VSZWFk?=
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Fri, 21 Dec 2012 17:19:38 GMT
Content-Length: 0

ブラウザからのリクエストヘッダーを直接取得します(これはクロムですが、FFは同じで、Cookieとユーザーエージェントが異なります)

GET /mvc/123/concierges/ConciergeRead HTTP/1.1
Host: localhost:7171
Connection: keep-alive
Cache-Control: max-age=0
Authorization: Negotiate oXcwdaADCgEBoloEWE5UTE1TU1AAAwAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAABXCiOIGAbEdAAAADxZEeKqgJFuPmHxoeEOwIJWjEgQQAQAAAPUXp1AtIpqEAAAAAA==
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASP.NET_SessionId=zctn1diidxyookfgq11rx1uy

kendo UI によって開始された Ajax リクエストからのリクエスト ヘッダー(これは FF ですが、その他)

GET /mvc/123/concierges/ConciergeRead HTTP/1.1
Host: localhost:7171
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Referer: http://localhost:7171/mvc/123/Concierges/
Cookie: ASP.NET_SessionId=4ff34okn0jkkwqi3k0qswb4l
Cache-Control: max-age=0

私が取った手順

  • コードをデバッグし、ルートが正しくヒットしていることを確認
  • データをGetConcierges()返し、json にシリアル化し、文字列にシリアル化し、全体的に正しく見えることを確認済み
  • クローム、FF、IE9
  • 異なる受け入れ動詞
  • 戻り値の型は ActionResult ではなく JsonResult です

解決策がない場合でも、デバッグ手順を追加していただければ幸いです。

4

1 に答える 1

3

最初にJSON結果を許可する必要があります。

var json2 = Json(sorted, "text/x-json");

なので

return Json(json2, JsonRequestBehavior.AllowGet);

JSONハイジャックを防ぐために無効になっているため、機密情報を送信するときにこのことを使用しないでください(機密データを応答の本文に返します)

于 2012-12-21T17:51:03.240 に答える