如何在ASP.NET上的同一路由上使用多个GET方法?

32 浏览
0 Comments

如何在ASP.NET上的同一路由上使用多个GET方法?

假设我在ASP.NET中有一个资源,如下所示:

/api/cars

我想公开有关出售汽车的信息。我想以两种方式公开它:

/api/cars?model=camry
/api/cars?make=toyota

我可以实现其中一个搜索,但无法同时实现两个搜索,因为它们的签名是相同的。我正在使用.NET 4.5中的ApiController:我如何在同一个资源上实现这两个搜索?

0
0 Comments

问题出现的原因是在ASP.NET中,当我们需要在同一个路由上使用多个GET方法时,通常会遇到问题。默认情况下,ASP.NET只允许在同一个路由上使用一个GET方法。

要解决这个问题,我们可以使用WebApi来实现。首先,我们需要确保我们的控制器继承自System.Web.Http.ApiController类。然后,我们可以在控制器方法上使用[HttpGet]属性来指定我们要使用的GET方法。

下面是一个示例控制器方法的代码:

public HttpResponseMessage GetCars([FromUri] string make, [FromUri] string model) {
    ... 代码 ...
}

在上面的示例中,我们使用[HttpGet]属性来指定这是一个GET方法。我们还使用[FromUri]属性来指定我们要从URI参数中获取makemodel的值。

通过这种方式,我们可以在同一个路由上使用多个GET方法,并根据需要从URI参数中获取不同的值。这对于需要根据不同的参数返回不同数据的应用程序非常有用。

这就是如何在ASP.NET中使用多个GET方法的解决方法。通过使用WebApi和适当的属性,我们可以灵活地处理不同的GET请求。

0
0 Comments

问题原因:在ASP.NET中使用多个GET方法时,需要找到一种方法来处理同一路由上的多个GET请求,以便根据请求的参数进行不同的操作。

解决方法:可以使用可空的输入参数来实现。由于使用的是字符串,所以甚至不需要将其声明为可空。可以参考以下代码:

public ActionResult Action(string model, string make)
{
    if(!string.IsNullOrEmpty(model))
    {
        // 对model进行操作
    }
    if(!string.IsNullOrEmpty(make))
    {
        // 对make进行操作
    }
}

如链接中所述,可以使用以下任意一种路由来调用正确的方法:

- GET /api/cars

- GET /api/cars?make=toyota

- GET /api/cars?model=camry

- GET /api/cars?make=toyota&model=camry

可以参考另一篇与此主题相关的文章

0