可选参数未被识别
Optional Parameter not being recognised
而不是有两种 API 方法,一种是获取所有实体,另一种是通过 ID 获取单个实体。我想将这两个合并在一起,因为它只有一行代码发生了变化(要执行的 lambda)。所以我想我不妨制作一个带有可选参数的 GET 方法和一个简单的 IF 语句来确定参数是否不同于 0。
当我只执行一个简单的 GET 请求时,我的所有实体都没有问题,但是在 URL 末尾传递一个 ID 后,当我去调试代码时它没有被识别。
我的 URL 看起来像(服务是一个虚拟目录)
http://localhost:55985/Service/api/Operator/5
这是路由问题吗?
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
GET 方法
public HttpResponseMessage Get(int machineID = 0)
{
using (DAL.Repositories.Repository<MachineOperators> machineOperatorRepo = new DAL.Repositories.Repository<MachineOperators>())
{
try
{
var operators = machineOperatorRepo.GetAll(y => y.Machine, z => z.Operator).Where(x => x.Operator.Active && x.Machine.Active);
if (machineID != 0)
{
operators = machineOperatorRepo.GetAll(y => y.Machine, z => z.Operator).Where(x => x.Operator.Active && x.MachineID == machineID);
}
}
}
}
我在方法上方使用 [HttpGet],但后来删除了它。
您应该将方法签名更改为 public HttpResponseMessage Get(int id)
,因为 {id}
在您的方法中找不到
而不是有两种 API 方法,一种是获取所有实体,另一种是通过 ID 获取单个实体。我想将这两个合并在一起,因为它只有一行代码发生了变化(要执行的 lambda)。所以我想我不妨制作一个带有可选参数的 GET 方法和一个简单的 IF 语句来确定参数是否不同于 0。
当我只执行一个简单的 GET 请求时,我的所有实体都没有问题,但是在 URL 末尾传递一个 ID 后,当我去调试代码时它没有被识别。
我的 URL 看起来像(服务是一个虚拟目录)
http://localhost:55985/Service/api/Operator/5
这是路由问题吗?
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
GET 方法
public HttpResponseMessage Get(int machineID = 0)
{
using (DAL.Repositories.Repository<MachineOperators> machineOperatorRepo = new DAL.Repositories.Repository<MachineOperators>())
{
try
{
var operators = machineOperatorRepo.GetAll(y => y.Machine, z => z.Operator).Where(x => x.Operator.Active && x.Machine.Active);
if (machineID != 0)
{
operators = machineOperatorRepo.GetAll(y => y.Machine, z => z.Operator).Where(x => x.Operator.Active && x.MachineID == machineID);
}
}
}
}
我在方法上方使用 [HttpGet],但后来删除了它。
您应该将方法签名更改为 public HttpResponseMessage Get(int id)
,因为 {id}
在您的方法中找不到