WebAPI:使用 Route 属性关键字有什么好处

WebAPI: What is the advantage of using Route attribute keyword

先看代码,取自本区https://www.codeproject.com/Articles/1005485/RESTful-Day-sharp-Security-in-Web-APIs-Basic#_Toc423441907

[GET("productid/{id?}")]
[GET("particularproduct/{id?}")]
[GET("myproduct/{id:range(1, 3)}")]
public HttpResponseMessage Get(int id)
{}

[DELETE("remove/productid/{id}")]
[DELETE("clear/productid/{id}")]
[PUT("delete/productid/{id}")]
public bool Delete(int id)
{
 if (id > 0)
     return _productServices.DeleteProduct(id);
 return false;
}

文章展示了我们可以使用http very来创建路由。如果它是正确的,那么为什么要使用 Route[] 属性关键字来定义动作路由或属性路由?

使用 Route[] 属性关键字而不是使用 http 动词定义路由有什么优势?

请指导我。谢谢

HTTP 动词本身在 web api 中用作路由,但如果这还不够,并且您希望为您的资源使用自己的路由,则使用 Route[] 属性。在 SO 中查看此问题 url。如果使用 HTTP 动词来检索此问题 URL 就像 https://whosebug.com/questions/get/44454705

但是 SO 使用 Route 属性通过删除 url 中的 get 并在 url

中传递问题 header 来使 URL 更加清晰

更新:获取以下网络 api 控制器

public class QuestionController: ApiController
{
  public string Get(int id)
  { 
    return "";
  }

  [Route("questions/{id}/{question}")]
  public string GetRoutedQuestion(int id)
  {
    return "";
  }
}

所以在上面的网络 api 控制器中调用 Get 方法你的 url 会像

yourdomain/api/question/get/1

此处 api 由于 web api 路由配置文件的默认路由规则而添加域后。

但是要调用 GetRoutedQuestion,您的 url 将是

yourdomain/question/1/question-text

如果您喜欢以前的 url,您可以坚持使用 HTTP 动词,但如果您想自定义 url,则必须使用属性路由或路由配置文件中的自定义路由。