如何将多个参数传递给 C# ApiController 内的 HttpGet 方法?

Cod*_*tle 1 .net c# routes

我有这个:

public class RuleController : ApiController
{
    private readonly IRuleManager _ruleManager;


    // GET: api/Rule/guid
    [HttpGet]
    public IHttpActionResult GetRule(Guid id)
    {
        var rules = _ruleManager.GetRulesById(id);
        return Ok(rules);
    }

    [HttpGet]
    public async Task<IHttpActionResult> GetRuleNew(string locale, string pno, string modelYear)
    {
      // do cool stuff with my params
    }

}
Run Code Online (Sandbox Code Playgroud)

我的路线配置:

        config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
        config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");
        config.Routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
        config.Routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) });
        config.Routes.MapHttpRoute(
        name: "ActionApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
Run Code Online (Sandbox Code Playgroud)

调用我的路线:

https://localhost:44328/api/rule/GetRuleNew?locale=e?pno=2?modelYear=1
Run Code Online (Sandbox Code Playgroud)

我得到:

"Message": "未找到与请求 URI 'https://localhost:44328/api/rule/GetRuleNew?locale=e?pno=2?modelYear=1' 匹配的 HTTP 资源。", "MessageDetail": "在控制器“规则”上找不到与请求匹配的操作。”

我缺少什么?

mar*_*c_s 5

你尝试过用这个来代替吗?

https://localhost:44328/api/rule/GetRuleNew?locale=e&pno=2&modelYear=1 
Run Code Online (Sandbox Code Playgroud)

基本上只需使用 a &(而不是 a ?)作为第二个和后续查询参数......