我正试图让它发挥作用:
[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
答案 0 :(得分:7)
确保在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;
}
}
还可以选择使参数成为可选参数,然后允许您使用inline参数调用URL,并让路由表使用类似于在基于约定的路由中完成的查询字符串。
[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;
}
}
答案 1 :(得分:1)
在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