0

複雑なオブジェクトを入力として jQuery を使用して ASP Web サービスを呼び出そうとしています。

これが私のjQuery fnです:

    request: function (url, method, data) {
        var json = JSON.stringify(data);
        return $.ajax({
            url: url,
            type: method,
            data: json,
            error: ErrorHelpers.printErrorToConsole,
            dataType: 'json',
            contentType: 'application/json',
            processData: false
        });
    }

渡されるjsonは次のようになります。

{
    "search": {
        "WarehouseId": "",
        "AuctionId": "",
        "Barcode": "",
        "Name": "",
        "CategoryId": "",
        "Description": "",
        "ManufacturerId": "",
        "StatusId": "",
        "StatusOperator": "",
        "HasPhoto": "",
        "DateReceived": "",
        "SellerAdministrativeArea": "",
        "SellerId": "",
        "IsApproved": "",
        "Keyword": "",
        "SortBy": "",
        "RowStart": "",
        "RowLimit": "10"
    }
}

私のWebメソッドの定義は次のとおりです。

    [WebMethod(EnableSession = true)]
    [ScriptMethod(UseHttpGet = true)]
    public List<ClientInventory> GetInventory(string search)
    { //code
    }

なぜエラーになるのか誰か知っていますか?これが私が得る応答です:

{"メッセージ":"無効な Web サービス呼び出し、パラメーターの値がありません: \u0027search\u0027."、"StackTrace":" System.Web.Script.Services.WebServiceMethodData.CallMethod (オブジェクト ターゲット、IDictionary 2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2 パラメーター) で\r \n System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext コンテキスト、WebServiceMethodData methodData、IDictionary`2 rawParams) で\r\n System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext コンテキスト、WebServiceMethodData methodData) で" ,"ExceptionType":"System.InvalidOperationException"}

4

2 に答える 2

0

JSON.stringify()GET リクエストを送信するときは使用しないでください。POSTリクエストを送受信するようにアプリを変更すると、問題は解決しました。

メソッドのシグネチャは次のようになります。

    [WebMethod(EnableSession = true)]
    //[ScriptMethod(UseHttpGet = true)]
    public List<ClientInventory> GetInventory(Search search)
    {}

jsのrequestfn はメソッドを「POST」として渡します。

于 2013-10-01T18:39:14.757 に答える
0

クラスを作成する必要があります...

public class Search
{
    public string WarehouseId { get; set; }
    public string AuctionId { get; set; }
    public string Barcode { get; set; }
    public string Name { get; set; }
    public string CategoryId { get; set; }
    public string Description { get; set; }
    public string ManufacturerId { get; set; }
    public string StatusId { get; set; }
    public string StatusOperator { get; set; }
    public string HasPhoto { get; set; }
    public string DateReceived { get; set; }
    public string SellerAdministrativeArea { get; set; }
    public string SellerId { get; set; }
    public string IsApproved { get; set; }
    public string Keyword { get; set; }
    public string SortBy { get; set; }
    public string RowStart { get; set; }
    public string RowLimit { get; set; }
}

このようにメソッドを変更します...

[WebMethod(EnableSession = true)]
    [ScriptMethod(UseHttpGet = true)]
    public List<ClientInventory> GetInventory(Search search)
    { //code
    }

また、ここで使用している方法を確認してください...

type: method,

Post?を使用していることをエラーで示唆しています。

于 2013-10-01T17:05:09.100 に答える