отправить сложный и простой параметр в веб-API, используя ajax - PullRequest
0 голосов
/ 02 марта 2019

я пишу веб-API.

контроллер веб-API:

public class TaskApiController : ApiController
    {
     [HttpPost]
        public IHttpActionResult PostNewTask(string xx,string yy,CommonTask Task)
        {
    ...
    }
}

и ajax:

var task = new Object();

task.Description = 'kjk';
task.ID = null;


var req = $.ajax({
    url: 'http://localhost:3641/api/TaskApi',
    contentType: "application/json",
    data: {"xx":'admin',"yy":'123',"task": JSON.stringify(task) },
    type: 'Post',
    success: function (data) {
        alert('success');
    }
});

req.fail(function (jqXHR, textStatus) {
    alert("Request failed: " + jqXHR.responseText);
});

и WebApiConfig:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

при запуске ajax возвращается ошибка: На контроллере TaskApi не найдено никаких действий, соответствующих запросу

1 Ответ

0 голосов
/ 04 марта 2019
<code>Always feed the POST methods with class type parameters. Please do the following modification on the API and JavaScript.

1. Create a model class

<pre>
public class Model
{
    public string xx { get; set; }
    public string yy { get; set; }
    public CommonTask Task { get; set; }  
}
Затем измените ваш Web API, чтобы он принимал тип вашей модели класса.
public class TaskApiController : ApiController
{
    [HttpPost]
    public IHttpActionResult PostNewTask([FromBody] Model model)
    {

    }
}
Измените ваш метод ajax, чтобы передать объект json, аналогичный классу модели
var task = new Object();

task.Description = 'kjk';
task.ID = null;

var data = {
    "xx": 'admin',
    "yy": '123',
    "task" : JSON.stringify(task)
};

var req = $.ajax({
    url: 'http://localhost:3641/api/TaskApi',
    contentType: "application/json",
    data: {"model": JSON.stringify(data) },
    type: 'Post',
    success: function (message) {
        alert('success');
    }
});

req.fail(function (jqXHR, textStatus) {
    alert("Request failed: " + jqXHR.responseText);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...