asp.net-web-api - 如何在 ASP API 中将参数从 JS 传递给 Controller
问题描述
我正在针对流量数据的数据库模型运行 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)));
}
}
}
解决方案
如果您的 Web API 需要一个类似于 的 URL api/query1/FATAL
,那么您应该相应地在 JavaScript 中构造 URL:
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)
{
}
推荐阅读
- flash - 2021 年的 Adobe flex
- python - 使用python的邮件中的图像?
- python - 强制异步函数在下一个任务之前完成
- python - 如何使用它的 url 粘贴图像而不下载它?Python-硒
- python - 为什么我的代码不断返回错误?
- php - Laravel (OctoberCMS) 排序(获取)模型
- r - 在多个条件下更改列值
- javascript - 通过 Javascript 中的成对分隔符拆分字符串,多次出现并排除
- vb.net - 可在 Youtube 上找到“VB.NET - 如何在 Visual Studio 中创建 SQLite 数据库”。当我从工作室运行它时。不工作
- python-3.x - 不使用 AWS 版本控制存储重复文件