Как передать параметр из JS в контроллер в ASP API - PullRequest
0 голосов
/ 10 марта 2019

Я выполняю LINQ-запросы к модели данных трафика в БД.
На html-странице есть раскрывающееся меню, из которого я получу значение selectedInjury для изменения результатов запроса (оно здесь смоделировано). Я не могу понять, как передать значение в контроллер.

Каждый вариант, который я пробовал, отвечает

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Это Javascript, который я пытаюсь заставить работать:

var mockSelectedInjury = "FATAL";
$.getJSON("/api/query1/selectedInjury", mockSelectedInjury)
    .done(function (data) {
        $.each(data, function (key, crash) {
            $('<li>', { text: formatCrashReport(crash) }).appendTo($('#crashTable'));
        });
    });

Это метод, который я написал в контроллере:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using final.Models;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace final.Controllers
{
public class CrashController : ApiController
{
    ChicagoTrafficEntities myEntities = new ChicagoTrafficEntities();

    [Route("api/query1")]
    [HttpGet]
    public IHttpActionResult GetQuery(string selectedInjury)
    {
        List<CrashReport> returnList = new List<CrashReport>();

        //get a selection of all the data where injury matches
        var records = from report in myEntities.CrashReports
                      where report.MostSevereInjury == selectedInjury
                      select new
                      {
                          PrimeContributingCause = report.PrimeContributingCause,
                      };

        // add the query items to a list
        foreach (var item in records)
        {
            CrashReport temp = new CrashReport
            {
                PrimeContributingCause = item.PrimeContributingCause
            };
            returnList.Add(temp);
        }

        // create a new query from that set that includes a count of the 
        // occurrences of the injury per the primeCause.
        var foo = returnList.GroupBy(n => n.PrimeContributingCause).
                Select(group =>
                    new
                    {
                        PrimeContributingCause = group.Key,
                        NumberInjuries = group.Count()
                    }).OrderByDescending(n => n.NumberInjuries);

        return ResponseMessage(Request.CreateResponse(HttpStatusCode.OK, Json(foo)));
    }
}

}

1 Ответ

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

Если ваш веб-API ожидает URL-адрес, похожий на api/query1/FATAL, то вы должны сконструировать URL-адрес в JavaScript соответственно:

var mockSelectedInjury = "FATAL";
$.getJSON("/api/query1/" + mockSelectedInjury)
   .done(function (data) {
      // ...
    });

Альтернатива: использование параметров запроса

Если вы хотите отправить Query-Parameters (вместо параметров, являющихся частью пути), тогда вы создаете объект и передаете его в качестве второго параметра:

var paramContainer = {'selectedInjury': 'FATAL'};
$.getJSON("/api/query1", paramContainer)
   .done(function (data) {
        // ...
    });

Подпись вашего метода API будет выглядеть следующим образом:

[Route("api/query1")]
[HttpGet]
public IHttpActionResult GetQuery(string selectedInjury)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...