【问题标题】:How to use Route attribute to bind query string with web API?如何使用 Route 属性将查询字符串与 Web API 绑定?
【发布时间】:2017-07-01 04:42:12
【问题描述】:

我正在努力让它发挥作用:

[Route("api/Default")]
public class DefaultController : ApiController
{
    [HttpGet, Route("{name}")]
    public string Get(string name)
    {
        return $"Hello " + name;
    }
}

通过调用此http://localhost:55539/api/Default?name=rami 但不起作用,也尝试了此:http://localhost:55539/api/Default/Hello?name=rami,这也不起作用:http://localhost:55539/api/Default/Hello/rami

【问题讨论】:

    标签: c# asp.net asp.net-web-api asp.net-web-api-routing


    【解决方案1】:

    确保在 WebApiConfig.cs 中启用属性路由

    config.MapHttpAttributeroutes();
    

    ApiController 动作可以有多个路由分配给它们。

    [RoutePrefix("api/Default")]
    public class DefaultController : ApiController {
    
        [HttpGet]
        //GET api/Default
        //GET api/Default?name=John%20Doe
        [Route("")]
        //GET api/Default/John%20Doe
        [Route("{name}")]
        public string Get(string name) {
            return $"Hello " + name;
        }
    }
    

    还有使参数可选的选项,这样您就可以在没有内联参数的情况下调用 URL,并让路由表使用查询字符串,类似于在基于约定的路由中完成的方式。

    [RoutePrefix("api/Default")]
    public class DefaultController : ApiController {
    
        [HttpGet]
        //GET api/Default
        //GET api/Default?name=John%20Doe 
        //GET api/Default/John%20Doe
        [Route("{name?}")]
        public string Get(string name = null) {
            return $"Hello " + name;
        }
    }
    

    【讨论】:

      【解决方案2】:

      在 Web API 中,首先发生路由模板匹配,然后是动作选择过程。

      你的 C# 应该是这样的:

      public class DefaultController : ApiController
      {
          [HttpGet] 
          [Route("api/Default/{name}")]
          public string Get(string name)
          {
              return $"Hello " + name;
          }
      }
      

      现在调用应该是这样的:

      http://localhost:55539/api/Default/Get?name=rami
      

      【讨论】:

      • 我认为这是不正确的。您显示的路线是 api/default/rami。 Get() 方法名称不应该是路由的一部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      相关资源
      最近更新 更多