我正在编写.Net核心WebAPI,在这里我编写了两个HttpGet方法,一个是获取所有记录而不考虑参数,另一个是使用参数(大约25个参数),但我得到了AmbigousMatchException错误。
我该如何解决这个问题呢?
下面是代码。
[Route("api/[controller]")]
[ApiController]
public class SummaryReportController : Controller
{
DataProvider dp = new DataProvider();
private readonly IConfiguration _configuration;
public SummaryReportController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
public JsonResult GetSummaryReport()
{
dp.ConnectionString = _configuration.GetConnectionString("conAccounting_SQLWeb");
DataSet ds = new DataSet();
ds = dp.GetDataSetSProc("uspFreight_SearchFreight");
DataTable dt = ds.Tables[0];
return new JsonResult(dt);
}
[HttpGet]
public JsonResult GetSummaryReportWithParams(SummaryReport sm)
{
dp.ConnectionString = _configuration.GetConnectionString("conAccounting_SQLWeb");
DataSet ds = new DataSet();
SqlParameter[] paramChk = new SqlParameter[21];
paramChk[0] = new SqlParameter("@VendIDName", sm.VendID);
paramChk[1] = new SqlParameter("@BOLNumber", sm.BOLNumber);
paramChk[2] = new SqlParameter("@BOLWeightFrom", sm.BOLWeightFrom);
paramChk[3] = new SqlParameter("@BOLWeightTo", sm.BOLWeightTo);
paramChk[4] = new SqlParameter("@InvoiceAmtFrom", sm.InvoiceAmountFrom);
paramChk[5] = new SqlParameter("@InvoiceAmtTo", sm.InvoiceAmountTo);
paramChk[6] = new SqlParameter("@DistanceFrom", sm.DistanceFrom);
paramChk[7] = new SqlParameter("@DistanceTo", sm.DistanceTo);
paramChk[8] = new SqlParameter("@InvoiceDateFrom", sm.InvoiceDateFrom);
paramChk[9] = new SqlParameter("@InvoiceDateTo", sm.InvoiceDateTo);
paramChk[10] = new SqlParameter("@ShipmentDateFrom", sm.ShipmentDateFrom);
paramChk[11] = new SqlParameter("@ShipmentDateTo", sm.ShipmentDateTo);
paramChk[12] = new SqlParameter("@ShipperZip", sm.ShipperZip);
paramChk[13] = new SqlParameter("@ConsigneeCityState", sm.ConsigneeCityState);
paramChk[14] = new SqlParameter("@ConsigneeZip", sm.ConsigneeZip);
paramChk[15] = new SqlParameter("@ConsigneeCode", sm.ConsigneeCode);
paramChk[16] = new SqlParameter("@ConsigneeName", sm.ConsigneeName);
paramChk[17] = new SqlParameter("@WhseID", sm.WhseID);
paramChk[18] = new SqlParameter("@LTLFTL", sm.LTLFTL);
paramChk[19] = new SqlParameter("@TRSO", sm.TRSO);
paramChk[20] = new SqlParameter("@FTL", sm.FTL);
ds = dp.GetDataSetSProcWithProc("uspFreight_SearchFreight", paramChk);
DataTable dt = ds.Tables[0];
return new JsonResult(dt);
}
}
发布于 2021-11-23 02:06:36
尝试将[Route("api/[controller]")]
更改为[Route("api/[controller]/[action]")]
,则SummaryReportController
中的默认操作路由将为api/SummaryReport/{actionname}
.You可以参考官方的doc了解路由。
例如,GetSummaryReport
操作的路由将是api/SummaryReport/GetSummaryReport
,GetSummaryReportWithParams
操作的路由将是api/SummaryReport/GetSummaryReportWithParams...
。
如果要从query获取SummaryReport sm
,可以在it.Here成为工作演示之前添加[FromQuery]
:
[Route("api/[controller]/[action]")]
[ApiController]
public class SummaryReportController : ControllerBase
{
[HttpGet]
public void GetSummaryReport()
{
}
[HttpGet]
public void GetSummaryReportWithParams([FromQuery]SummaryReport sm)
{
}
}
public class SummaryReport
{
public int Id { get; set; }
public string Name { get; set; }
}
结果:
发布于 2021-11-22 14:47:47
将参数添加到第二个端点的管线[HttpGet("{sm}")]
https://stackoverflow.com/questions/70067453
复制相似问题