传递具有不同参数的Web API以将它们传递给存储过程

时间:2017-06-12 14:35:35

标签: asp.net-mvc asp.net-web-api

我有一个带有大约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

2 个答案:

答案 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();
}