如何使用 Route 属性将查询字符串与 web API 绑定?

How to use Route attribute to bind query string with web API?

我正在尝试让它工作:

[Route("api/Default")]
public class DefaultController : ApiController
{
    [HttpGet, Route("{name}")]
    public string Get(string name)
    {
        return $"Hello " + name;
    }
}

通过调用这个 http://localhost:55539/api/Default?name=rami 但没有用,也试过这个:http://localhost:55539/api/Default/Hello?name=rami ,这也不起作用:http://localhost:55539/api/Default/Hello/rami

在 Web 中 API 首先进行路由模板匹配,然后进行操作选择过程。

你的 C# 应该是这样的:

public class DefaultController : ApiController
{
    [HttpGet] 
    [Route("api/Default/{name}")]
    public string Get(string name)
    {
        return $"Hello " + name;
    }
}

现在调用应该是这样的:

http://localhost:55539/api/Default/Get?name=rami

确保在 WebApiConfig.cs

中启用属性路由
config.MapHttpAttributeroutes();

A​​piController 操作可以分配多个路由。

[RoutePrefix("api/Default")]
public class DefaultController : ApiController {

    [HttpGet]
    //GET api/Default
    //GET api/Default?name=John%20Doe
    [Route("")]
    //GET api/Default/John%20Doe
    [Route("{name}")]
    public string Get(string name) {
        return $"Hello " + name;
    }
}

还有使参数可选的选项,这样您就可以在不使用内联参数的情况下调用 URL,并让路由 table 使用与它类似的查询字符串在 convention-based 路由中完成。

[RoutePrefix("api/Default")]
public class DefaultController : ApiController {

    [HttpGet]
    //GET api/Default
    //GET api/Default?name=John%20Doe 
    //GET api/Default/John%20Doe
    [Route("{name?}")]
    public string Get(string name = null) {
        return $"Hello " + name;
    }
}