如何在 ASP.NET MVC API 中使用查询字符串参数

How to use Query String parameters in the ASP.NET MVC API

[RoutePrefix("web/api")]
public class UsersController : BaseController
{
    [Route("users")]
    [HttpGet]
    public Response<List<UserDTO>> Get(string q, string ex)

我正在尝试让 get 函数响应: web/api/users?q=sd&ex=1

但是不起作用?

试试这个:

`[RoutePrefix("web/api")]
public class UsersController : BaseController
{
    [Route("users/{q}/{ex}")]
    [HttpGet]
    public Response<List<UserDTO>> Get(string q, string ex)`

然后像这样调用 api:web/api/users/text1/text2

您可以添加自定义路线

config.Routes.MapHttpRoute(
    name: "NameOfRoute",
    routeTemplate: "web/{controller}/{action}?q={q}&ex={ex}",
    defaults: new { controller = "controller-name", action = "action-name", 
        q = RouteParameter.Optional, ex= RouteParameter.Optional }
    );

我猜你的错误是你在控制器 class 上使用 RoutePrefix 而在方法上使用 Route

如果你想像你展示的那样调用 url 你应该这样定义你的控制器:

[RoutePrefix("web/api/users")]
public class UsersController : BaseController
{
    [HttpGet]
    public Response<List<UserDTO>> Get(string q, string ex)

首先,为了能够在同一个控制器中拥有多个 GET 方法,您必须添加您的自定义路由:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

然后,在您的控制器中,您需要将参数标记为 FromUri 以告知该方法期望来自 URI 的参数。这样,您就可以按以下方式调用该方法:

/web/api/users/Get?q="your string1"&ex="ex"

public Response<List<UserDTO>> Get([FromUri]string q, [FromUri]string ex)

如果这是唯一的GET方法,您可以跳过映射自定义路由的部分。

希望对您有所帮助。

祝你好运!

[RoutePrefix("web/api")]
public class UsersController : BaseController
{
    [Route("users")]
    [HttpGet]
    public Response<List<UserDTO>> Get(string q, string ex)

很抱歉打扰大家,但这完全可以。我做错的是我在 MVC 项目中有一些控制器指向相同的 url。结果我得到了 404。

但是非常感谢大家。