如何在ASP.NET MVC API中使用Query String参数

时间:2015-12-11 06:40:40

标签: asp.net-mvc asp.net-apicontroller

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

我正在尝试让get函数响应: 网/ API /用户Q = SD&安培; EX = 1

但它不起作用?

5 个答案:

答案 0 :(得分:1)

我认为你的错误是你在控制器类上使用RoutePrefix并在方法上使用Route

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

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

答案 1 :(得分:0)

试试这个:

`[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

答案 2 :(得分:0)

您可以添加自定义路线

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 }
    );

答案 3 :(得分:0)

首先,为了能够在同一个控制器中拥有多个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方法,您可以跳过映射自定义路由的部分。

希望这有帮助。

祝你好运!

答案 4 :(得分:0)

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

很抱歉打扰你们所有人,但这完全没问题。我做错了是我在MVC项目中有一些控制器指向相同的URL。结果我得到了404.

但是非常感谢。