如何在 web api 中使用 get 作为方法参数

Posted

技术标签:

【中文标题】如何在 web api 中使用 get 作为方法参数【英文标题】:how to use the get as method parameter in web api 【发布时间】:2020-04-09 05:05:56 【问题描述】:

为了在 post man 中使用查询字符串参数来获取单个数据,我想在尝试此操作时使用 get 方法作为参数 public HttpResponseMessage test(int id) 它显示错误

未找到与请求 URI 'http://localhost:53720/api/test/1' 匹配的 HTTP 资源。

找不到与名为“test”的控制器匹配的类型。

代码是:

   public class DefaultController: ApiController 
    public object Conn  get; private set;

    [Route("api/test/id")]
    [HttpGet]
    public HttpResponseMessage test(int id) 
     DataSet ds = new DataSet();
     string conname = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
     SqlConnection conn = new SqlConnection(conname);
     conn.Open();
     SqlCommand cmd = new SqlCommand("select *from Employees", conn);
     SqlDataAdapter sda = new SqlDataAdapter(cmd);
     sda.Fill(ds);
     return new HttpResponseMessage 
      Content = new StringContent(JsonConvert.SerializeObject(ds), Encoding.UTF8, "application/json")
     ;
    
    

【问题讨论】:

如果能解决您的问题,请将其标记为答案。 meta.stackexchange.com/questions/147531/…***.com/help/someone-answers 【参考方案1】:

您的id 是您路线中的可变参数,您的路线看起来不正确。尝试在 id 周围使用 。如下所示。

[Route("api/test/id")] // <===== notice that id is in 
[HttpGet]
public HttpResponseMessage test(int id)

如果你想限制路由模板中参数的匹配方式,你也可以使用路由约束。一般语法是parameter:constraint

所以在你的情况下,它会是这样的:

[Route("api/test/id:int")]

查看here了解更多详情

【讨论】:

以上是关于如何在 web api 中使用 get 作为方法参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将类型的对象作为参数传递给Web Api Get / Post方法

如何使用 MVC Web Api GET 将对象作为参数传递

如何使用 Web API Get 方法返回图像

如何在 Web API 2 控制器中放置多个 GET 方法?

在 ASP.NET Web API 中使用多个 Get 方法进行路由

如何将json POST数据作为对象传递给Web API方法?