如何使用 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();
ApiController 操作可以分配多个路由。
[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;
}
}
我正在尝试让它工作:
[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();
ApiController 操作可以分配多个路由。
[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;
}
}