【问题标题】:c# webapi with query stringc# webapi查询字符串
【发布时间】:2019-05-10 17:02:30
【问题描述】:

我有类似 WebApi 的网络服务:

public class ControllerName : ApiController
{
    [Route("api/ControllerName/{p1}/{p2}/{p3}/{p4}/{p5}")]
    public string GetItemByNameAndId(string p1, string p2, string p3, string p4, string p5)
    {

    }
}

这种类型的请求有效:

主机/api/ControllerName/1/2/3/4/5

但我想要这种类型的请求:

host/api/ControllerName/&p1=1&p2=2&p3=3&p4=4&p5=5

我收到如下错误:

从 客户 (&)。必须遵循哪些步骤?配置文件的任何更改, 任何属性等。

感谢您的宝贵时间。

【问题讨论】:

  • cor,这是一个广泛的问题。到目前为止,您做了什么,为什么您认为它不起作用?
  • 但是,您已经声明了期望 /1/2/3/4/5 的路线

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


【解决方案1】:

如果你不想要第一种类型的请求

host/api/ControllerName/1/2/3/4/5

然后将它们从路由模板中移除

[RoutePrefix("api/ControllerName")]
public class ControllerName : ApiController {
    //GET api/ControllerName?p1=1&p2=2&p3=3&p4=4&p5=5
    [HttpGet]
    [Route("")]
    public IHttpActionResult GetItemByNameAndId(string p1, string p2, string p3, string p4, string p5) {
        //...
        return Ok(someResult);
    }
}

这样查询字符串版本将映射到控制器操作。

【讨论】:

    【解决方案2】:

    参数太多不是好设计,可以重构为参数类。

    public class ParamClass {
        public string P1 { get; set; }
        public string P2 { get; set; }
        public string P3 { get; set; }
        public string P4 { get; set; }
        public string P5 { get; set; }
    }
    

    在你的 api 控制器中,像这样使用它:

    //GET api/ControllerName?host/api/ControllerName?p1=1&p2=2&p3=3&p4=4&p5=5
    [HttpGet]
    [Route("")]
    public IHttpActionResult GetItemByNameAndId([FromUri(PreFix="")] ParamClass param) {
        //...
        return Ok(someResult);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 2013-08-23
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多