我正在针对流量数据的数据库模型运行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)));
}
}
}
答案 0 :(得分:0)
如果您的Web API需要一个类似于api/query1/FATAL
的URL,那么您应该相应地使用JavaScript构造该URL:
var mockSelectedInjury = "FATAL";
$.getJSON("/api/query1/" + mockSelectedInjury)
.done(function (data) {
// ...
});
替代方法:使用查询参数
如果要发送查询参数(而不是参数成为路径的一部分),则构造一个对象并将其作为第二个参数传递:
var paramContainer = {'selectedInjury': 'FATAL'};
$.getJSON("/api/query1", paramContainer)
.done(function (data) {
// ...
});
您的API方法的签名如下所示:
[Route("api/query1")]
[HttpGet]
public IHttpActionResult GetQuery(string selectedInjury)
{
}