小さいが非常に厄介な問題。asp.net Web サービスで jQuery JSON 呼び出しを使用しようとしています。引数なしで Web サービスを呼び出すと、以下の HttpModule ですべて正常に動作します。クライアント側から値を送信しようとするとすぐにモジュールが実行されますが、プロセスは実際の Web サービス メソッドに渡されず、サーバー側の 500 エラーが返されます。モジュールを途中から削除すると、メソッドはパラメーターを使用して完全に正常に実行されますが、応答は JSON ではなく XML 形式で返されるため、モジュールを使用することはできません。
----------- Jquery 呼び出し ----------------------
var dd = { 'name': 'pakistan' };
$(document).ready(function () {
$.getJSON("http://localhost:59271/Testing/shows-app.asmx/HelloWorld?callback=?",
dd,
function (data) {
val = JSON.parse(data.d)
$("#content").html(val.response);
});
});
------------ Httpモジュール -------------
private const string JSON_CONTENT_TYPE = "application/json; charset=utf-8";
public void Dispose()
{
}
public void Init(HttpApplication app)
{
app.BeginRequest += OnBeginRequest;
app.EndRequest += new EventHandler(OnEndRequest);
}
public void OnBeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Request;
//Make sure we only apply to our Web Service
if (request.Url.AbsolutePath.ToLower().Contains("-app."))
{
var method = app.Context.Request.Headers["REQUEST_METHOD"];
if (string.IsNullOrEmpty(app.Context.Request.ContentType))
{
app.Context.Request.ContentType = JSON_CONTENT_TYPE;
}
app.Context.Response.Write(app.Context.Request.Params["callback"] + "(");
var method2 = app.Context.Request.Headers["REQUEST_METHOD"];
}
}
void OnEndRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpRequest request = app.Request;
if (request.Url.AbsolutePath.ToLower().Contains("-app."))
{
app.Context.Response.Write(")");
app.Context.Response.ContentType = "application/json";
}
}
- - - - - - ウェブサービス - - - - - - - - - - -
[WebMethod]
[System.Web.Script.Services.ScriptMethod(UseHttpGet = true, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public string HelloWorld(string name)
{
var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(new
{
response = "Pakistan " + " Zindabad"
});
return json;
//string jsoncallback = HttpContext.Current.Request["callback"];
//return string.Format("{0}({1})", jsoncallback, json);
}
モジュールを途中から削除すると、メソッドはパラメーターを使用して完全に正常に実行されますが、応答は JSON ではなく XML 形式で返されるため、モジュールを使用することはできません。
事前にたくさんありがとう。