簡體   English   中英

$ http對Web API 2的調用未傳遞參數

[英]$http Call to Web API 2 Not Passing Parameter

這是我的C#WebAPI2控制器,受到了打擊:

[HttpGet, Route("bycaseidlist/{idArray}")]
public async Task<IHttpActionResult> GetByCaseIdList([FromUri] List<int> idArray)

這是電話:

var idArray = [4,4,2,4];
var url = baseUrl + 'api/cases/bycaseidlist/' + idArray ;

$http.get(url)

問題在於API無法獲取數組,而是獲取...這:

在此處輸入圖片說明

換句話說,一個值只有一個數組:0。為什么會這樣? 我如何解決它? 似乎與這個答案相符 ,但這是行不通的。 我應該把它傳遞到體內嗎? 我覺得我缺少明顯的東西。

Get ActionMethods可以將對象作為參數。 但是,默認行為是在參數不是.net原語時查看正文。 為了強制操作方法使用模型綁定器從請求中讀取對象數據,可以使用[FromUri]或[ModelBinder]屬性修飾該參數。 (請注意,還有其他方法可以執行此操作,其中包括執行參數綁定規則,但這可能對您在此處試圖完成的工作而言是過高的選擇)。 這是一個解決您原來提出的問題的實現。

 <script type="text/javascript">
    var ajaxCall = function (myArry) {
        var ajaxProperties = {};
        ajaxProperties.url = "/api/Mul/Mutiply";
        ajaxProperties.type = "Get";
        ajaxProperties.data = {};
        ajaxProperties.data.numbers = myArry;
        ajaxProperties.contentType = "application/json";
        console.log(ajaxProperties);
        ajaxProperties.success = function (data) {
            console.log(data);
        }
        ajaxProperties.error = function (jqXHR) {
            console.log(jqXHR);
        };
        $.ajax(ajaxProperties);

    };
    var getData = function (e) {

        var myArry = new Array();
        myArry.push($('input[name=num1').val());
        myArry.push($('input[name=num2').val());

        ajaxCall(myArry);
        return false;
    };
     </script>

調節器

    [HttpGet]
    public IHttpActionResult Multiply([FromUri] int[] numbers)
    {
        int result = 0;
        if(numbers.Length > 0)
        {
            result = 1;
            foreach (int i in numbers)
            {
                result = result * i;
            }
        }
        return Ok(result);
    }
}

我認為我的錯誤是使用Get。 我可能記錯了(有人確認您是否是副手),但Get可能無法將對象作為參數。 無論如何,我將方法更改為POST,然后更改了要在請求正文(而不是url)中發送的參數。 現在可以使用了。 這是工作代碼:

[HttpPost, Route("bycaseidlist")]
public async Task<IHttpActionResult> PostByCaseIdList([FromBody] int[] sqlCaseIdArray)

以及通話本身:

                    function runDbCall(url, sqlCaseIdArray){
                        return $http({
                            method: 'POST',
                            url: url,
                            data: sqlCaseIdArray
                        });
                    }

                    runDbCall(url, sqlCaseIdArray)

當我弄清楚問題是否出在“不能拿東西”這個問題上時,我會回到這個問題上,但是我認為可以在網址中,而不能在正文中……需要澄清。 如果有人在那部分上發布答案,我會接受的,因為這可能是問題的根源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM