我有一个带有大约6个存储过程的Web API,每个存储过程都有不同的参数,例如2个参数或3个参数或1个参数,一个存储过程需要0个参数。
我如何将这些参数传递给我的网络API?
这是我的webConfig.cs
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
我的控制器代码:
public class channelsController : ApiController
{
[HttpGet]
[Route("api/channels/{code:string}/{search_by:string}")]
public IEnumerable<sp_get_channels_Result> Get(string code,string search)
{
myEntities db = new myEntities();
return db.sp_get_channels("", "all").AsEnumerable();
}
}
//no param
public class networksController : ApiController
{
[HttpGet]
public IEnumerable<sp_get_networks_Result> Get()
{
myEntities db = new myEntities();
return db.sp_get_networks().AsEnumerable();
}
}
但是我得到了这个错误:
DefaultInlineConstraintResolver
类型的内联约束解析程序无法解析以下内联约束:string
。
答案 0 :(得分:1)
:string
不是有效的路线约束。 请在此处查看默认约束列表:https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#route-constraints
你可以写自己的,但默认情况下不存在。
答案 1 :(得分:1)
您可以尝试将“search_by”更改为“搜索”
[HttpGet]
[Route("api/channels/{code}/{search}")]
public IEnumerable<sp_get_channels_Result> Get(string code,string search)
{
myEntities db = new myEntities();
return db.sp_get_channels("", "all").AsEnumerable();
}