用于重载控制器方法的相同URL

3 c# asp.net-web-api asp.net-web-api2

在我的web api应用程序中,我想让客户端使用相同的路径发出请求,但是传递不同类型的参数.

例如:

public class MyController : ApiController
{
   [HttpDelete]
   public IHttpActionResult Delete(int id) {..}

   [HttpDelete]
   public IHttpActionResult Delete2(Guid id) {..}

   [HttpDelete]
   public IHttpActionResult Delete3(string id) {..}

}
Run Code Online (Sandbox Code Playgroud)

我希望每个方法的url类似,例如:

api/MyController/1
api/MyController/abc etc..
Run Code Online (Sandbox Code Playgroud)

这可能吗?我尝试了很多与ActionName属性和路由配置的组合,但似乎没有任何效果.

谢谢

Nas*_*ine 5

您可以使用属性路由.例如:

[RoutePrefix("MyController")]
public class MyController : ApiController
{
   [HttpDelete]
   [Route("delete/{id:int}")]
   public IHttpActionResult Delete(int id) {..}

   [HttpDelete]
   [Route("delete/{id:guid}")]
   public IHttpActionResult Delete2(Guid id) {..}

   [HttpDelete]
   [Route("delete/{id:alpha}")]
   public IHttpActionResult       Delete3(string id) {..}

}
Run Code Online (Sandbox Code Playgroud)

如果您这样做,那么请求网址将是:

http://yoursever/mycontroller/delete/123
http://yoursever/mycontroller/delete/abc
http://yoursever/mycontroller/delete/91c74f8f-d981-4ee1-ba36-3e9416bba202
Run Code Online (Sandbox Code Playgroud)