91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET WEB API之屬性路由的示例分析

發布時間:2021-08-17 11:06:10 來源:億速云 閱讀:166 作者:小新 欄目:開發技術

這篇文章主要介紹ASP.NET WEB API之屬性路由的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

以下為常規MVC路由

 config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
      );

如果我們要實現類似以下效果路由的話,使用常規公約路由比較麻煩。

order/Miles/三只松鼠干果/2袋
order/2017/1/13

如果使用屬性路由的話就比較簡單了。

新建WEB API項目的話,打開App_Start目錄下的WebApiConfig.cs文件添加以下代碼開啟屬性路由配置。

 config.MapHttpAttributeRoutes();

屬性路由也可以和公約路由混合使用,如下:

 public static void Register(HttpConfiguration config)
    {
      // Web API 配置和服務

      // Web API 路由
      config.MapHttpAttributeRoutes();

      config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
        constraints: new { id=@"\d+"}
      );
    }

在要使用屬性路由的方法上打上特性標記,如下 :

 [Route("order/{UserNickName}/{ProductName}/{count}")]

測試結果(URL經過了編碼,不然會報400錯誤。)

ASP.NET WEB API之屬性路由的示例分析

通常情況下,在同一個控制器中的所有路由以相同的前綴開頭

  [Route("api/books")]
  [Route("api/books/{id:int}")]
  [Route("api/books")]

這樣很明顯是比較麻煩的。所以我們用[RoutePrefix]屬性來設置一個公共的前綴

ASP.NET WEB API之屬性路由的示例分析

測試結果

ASP.NET WEB API之屬性路由的示例分析

如果使用了[RoutePrefix]的話,某些比較特殊的api,我們可以使用波浪線來重寫路由前綴,如下:

ASP.NET WEB API之屬性路由的示例分析

測試結果(同一個類下)

ASP.NET WEB API之屬性路由的示例分析

路由前綴中也可以包含參數,如下

ASP.NET WEB API之屬性路由的示例分析

測試結果

ASP.NET WEB API之屬性路由的示例分析

可以在路由中添加參數約束,如下

ASP.NET WEB API之屬性路由的示例分析

測試結果

ASP.NET WEB API之屬性路由的示例分析

如果參數不是Int類型,則不會匹配到該路由

以下都是一些會被支持到的約束

ASP.NET WEB API之屬性路由的示例分析

可以使用多個約束,但是要用冒號分開

[Route("users/{id:int:length(1,3)}")]
public User GetUserById(int id) { ... }

結果

ASP.NET WEB API之屬性路由的示例分析

如果不在范圍內的話則匹配不到

ASP.NET WEB API之屬性路由的示例分析

自定義路由約束,需要實現IHttpRouteConstraint接口,具體查看官方

public class NonZeroConstraint : IHttpRouteConstraint
{
  public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, 
    IDictionary<string, object> values, HttpRouteDirection routeDirection)
  {
    object value;
    if (values.TryGetValue(parameterName, out value) && value != null)
    {
      long longValue;
      if (value is long)
      {
        longValue = (long)value;
        return longValue != 0;
      }

      string valueString = Convert.ToString(value, CultureInfo.InvariantCulture);
      if (Int64.TryParse(valueString, NumberStyles.Integer, 
        CultureInfo.InvariantCulture, out longValue))
      {
        return longValue != 0;
      }
    }
    return false;
  }
}

注冊約束

public static class WebApiConfig
{
  public static void Register(HttpConfiguration config)
  {
    var constraintResolver = new DefaultInlineConstraintResolver();
    constraintResolver.ConstraintMap.Add("nonzero", typeof(NonZeroConstraint));

    config.MapHttpAttributeRoutes(constraintResolver);
  }
}

使用約束

[Route("{id:nonzero}")]
public HttpResponseMessage GetNonZero(int id) { ... }

可選的URI參數和默認值

你可以通過添加一個問號標記路由參數使成為一個可選的URI參數。如果一個路由參數是可選的,你必須為這個方法參數定義一個默認值。

public class BooksController : ApiController
{
  [Route("api/books/locale/{lcid:int?}")]
  public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) { ... }
}

或者在路由模版中定義默認值

public class BooksController : ApiController
{
  [Route("api/books/locale/{lcid=1033}")]
  public IEnumerable<Book> GetBooksByLocale(int lcid) { ... }
}

以上是“ASP.NET WEB API之屬性路由的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九龙城区| 沙雅县| 临沧市| 旬邑县| 绿春县| 类乌齐县| 瓦房店市| 诸城市| 三台县| 甘泉县| 彰化县| 无锡市| 讷河市| 怀远县| 克什克腾旗| 商河县| 桐庐县| 深水埗区| 大理市| 海口市| 柘荣县| 建平县| 霍城县| 龙海市| 美姑县| 东丰县| 获嘉县| 陵川县| 万安县| 永胜县| 廊坊市| 弋阳县| 双峰县| 广南县| 会理县| 志丹县| 南溪县| 宜宾市| 灵宝市| 乳山市| 通河县|