Вызов веб-API с помощью jquery AJAX в ASP.NET MVC 5 при получении ошибки - PullRequest
0 голосов
/ 02 марта 2019

Я добавил веб-API в проект, который был доступен.мой контроллер API:

    namespace MyApplication.Controllers
{
    public class TaskApiController : ApiController
    {

        [HttpPost]
        public IHttpActionResult Create(string UserName, string Password, string DoingDateTime, int ReferenceFrom, int ReferenceTo, string MaturityDateTime = "", int? PersonCompany_AffiliationID = null, int? SubjectID = null, string Description = "", int? ImportanceDegreeID = null, int? StatusID = null, int CompletionPercentage = 0, int? DossierID = null)
        {
            ...
            return Ok();
        }
    }
}

WebApiConfig.cs:

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

добавить следующий код в web.config:

    <system.webServer>
<httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept,Authorization" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

и ajax:

$.ajax({
                    url: 'localhost:3641/api/TaskApi',
                    contentType: 'application/x-www-form-urlencoded',
                    dataType: 'json',
                    data: {
                        UserName: 'admin',
                        Password: '123',
                        Description: 'test',
                        DoingDateTime: '1397/12/10',
                        ReferenceFrom: 2,
                        ReferenceTo: 2
                    },
                    type: 'Post',
                    success: function (data) {
                        alert('success');
                    }
            , error: function (response) {
                        alert(response.responseText);
                    }
        });

при тестировании веб-API в браузере с помощью:

http://localhost:3641/api/TaskApi?UserName=admin&Password=312&Description=hkj&DoingDateTime=1397/02/05&ReferenceFrom=2&ReferenceTo=2

Работает правильно.но когда aun ajax возвращает ошибку, а response.responseText возвращает "undefined".

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

В вашем классе я написал AJAX, но он все еще не работает.

var task = new Object();

task.Description = 'kjk';
task.PersonCompany_AffiliationID = null;
task.SubjectID = null;
task.DoingDateTime = '1397/12/11';
task.MaturityDateTime = null;
task.ImportanceDegreeID = null;
task.StatusID = null;
task.CompletionPercentage = 0;
task.ReferenceFrom = 2;
task.ReferenceTo = 2;
task.DossierID = null;



var req = $.ajax({
    url: 'http://localhost:3641/api/TaskApi',
    contentType: 'application/x-www-form-urlencoded',
    dataType: 'json',
    data: task,
    type: 'Post',
    success: function (data) {
        alert('success');
    }
    , error: function (response) {
                alert(response.responseText);
            }
});

Я заметил ошибку из-за способа отправки информации в действие ... Я установил точку останова напервая линия действия, но программа не вступает в действие.

0 голосов
/ 03 марта 2019

Спасибо всем уважаемым, кто ведет меня

Проблемы решены двумя вещами: 1- Одно из обязательных полей в модели не было инициализировано в AJAX. 2 - Другими словами, значение данныхустановить в JSON.stringify (задача)

0 голосов
/ 02 марта 2019

Самый быстрый и чистый способ решить вашу проблему - создать Viewmodel.

Также помните, что для сложных типов Web Api по умолчанию считывает значение из тела сообщения с использованием средства форматирования медиа-типа.

 public class TaskViewModel
 {
        public string UserName { get; set; }
        public string Password { get; set; }
        public string DoingDateTime { get; set; }
        public int ReferenceFrom { get; set; }
        public int ReferenceTo { get; set;  }
        public string MaturityDateTime { get; set; }
        public int? PersonCompany_AffiliationID { get; set; }
        public int? SubjectID { get; set; }
        public string Description { get; set; }
        public int? ImportanceDegreeID { get; set; }
        public int? StatusID { get; set; }
        public int CompletionPercentage { get; set; }
        public int? DossierID { get; set; }
}

[HttpPost]
public IHttpActionResult Create(TaskViewModel taskViewModel)
{
   if (!ModelState.IsValid)
   {
       return BadRequest("");
   }
            return Ok();
}
...