将String传递给具有路由属性

时间:2017-07-19 16:00:58

标签: c# asp.net-mvc asp.net-web-api2

我在API控制器上有一个方法,我在属性中设置了路径,但我似乎无法将字符串传递给它。当我尝试使用浏览器中的Ajax请求时,控制台显示以下错误:

  

BAD REQUEST - 由于服务器无法处理请求   语法无效。

我经过的字符串非常庞大,但不幸的是,这是我将数据导入到我正在使用的遗留应用程序中的唯一方法。我使用的测试网址是(支持你自己):

http://localhost:50915/api/job/import/ALMIG&sup3123456&sup32%20DAY%20ECONOMY&sup320170720&sup320170721&sup30&sup3&sup3&sup3&sup322&sup3Lara%20Croft%20Way&sup3Derby&sup3&sup3&sup3DE23%206GB&sup3Stuff&sup310&sup31&sup30&sup325&sup30&sup3&sup31%7CI%20Great%20Danger&sup30&sup30&sup30&sup3&sup3&sup30&sup3true&sup30&sup3&sup3&sup3&sup3&sup3&sup3&sup31&sup30&sup30&sup316&sup3Baden%20Road&sup3Stoke-on-Trent&sup3&sup3&sup3ST6%201SA&sup3&sup30&sup30&sup30&sup3&sup3&sup3&sup30&sup30&sup30&sup30&sup3&sup30&sup31&sup30&sup3&sup3&sup3&sup3&sup3&sup3&sup3&sup3&sup3&sup3&sup3Liane&sup307730044916&sup3Lara&sup307730044916&sup30&sup3d2f0acf7-50e1-4a53-96ce-4fffd00b1a96&sup30

这个方法的定义如下,里面的代码是无关紧要的,因为我在方法的开头设置了一个永远不会被击中的断点:

[System.Web.Http.HttpPost]
[System.Web.Http.Route("api/job/import")]
public int TmsImport([FromBody]string import)
{
    // do something...
}

编辑:添加了Ajax请求

job.confirmBookings = function () {
    // TMS Import
    job.toConfirmRow.filter(function(obj) {
        var jobRow = obj;
        var strArray = [];
        for (var prop in jobRow) {
            if (jobRow.hasOwnProperty(prop)) {
                strArray.push(jobRow[prop]);
            }
        }
        var joinedStr = strArray.join(job.seperator);
        $.ajax({
            type: "POST",
            crossDomain: true,
            data: joinedStr,
            url: job.tmsString, 
            contentType: "application/json;charset=utf-8",
            success: function (data, status, xhr) {
                console.log("TMS ID: " + data + " | " + status);
            },
            error: function (xhr) {
                alert(xhr.responseText);
            }
        });
    });

1 个答案:

答案 0 :(得分:1)

首先正确格式化路线模板

[HttpPost]
[Route("api/job/import")] //Matches POST api/job/import
public int TmsImport([FromBody]string import) {
    // do something...
}

此外,您应该将数据发布在请求正文中。如果有效负载很大,那么您不希望在URL中