最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解ASP.NET WEB API 之屬性路由

 更新時(shí)間:2017年03月27日 17:07:30   作者:三只倉鼠  
本篇文章主要介紹了ASP.NET WEB API 之屬性路由,路由就是Web API如何把URI匹配到一個(gè)Action的描述。有興趣的可以了解一下。

以下為常規(guī)MVC路由

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

如果我們要實(shí)現(xiàn)類似以下效果路由的話,使用常規(guī)公約路由比較麻煩。

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

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

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

 config.MapHttpAttributeRoutes();

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

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

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

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

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

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

測(cè)試結(jié)果(URL經(jīng)過了編碼,不然會(huì)報(bào)400錯(cuò)誤。)


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

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

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

測(cè)試結(jié)果

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

測(cè)試結(jié)果(同一個(gè)類下)

路由前綴中也可以包含參數(shù),如下

測(cè)試結(jié)果


可以在路由中添加參數(shù)約束,如下

測(cè)試結(jié)果

如果參數(shù)不是Int類型,則不會(huì)匹配到該路由

以下都是一些會(huì)被支持到的約束

可以使用多個(gè)約束,但是要用冒號(hào)分開

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

結(jié)果

如果不在范圍內(nèi)的話則匹配不到

自定義路由約束,需要實(shí)現(xiàn)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;
  }
}

注冊(cè)約束

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參數(shù)和默認(rèn)值

你可以通過添加一個(gè)問號(hào)標(biāo)記路由參數(shù)使成為一個(gè)可選的URI參數(shù)。如果一個(gè)路由參數(shù)是可選的,你必須為這個(gè)方法參數(shù)定義一個(gè)默認(rèn)值。

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

或者在路由模版中定義默認(rèn)值

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

差不多寫這么多常用的,剩余部分自己查看官網(wǎng)!希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • jQuery Data Linking 對(duì)象與對(duì)象之間屬性的關(guān)聯(lián)

    jQuery Data Linking 對(duì)象與對(duì)象之間屬性的關(guān)聯(lián)

    ASP.NET團(tuán)隊(duì)最近還向jQuery社區(qū)提交了被稱為data linking的技術(shù),Data Linking可以幫助你實(shí)現(xiàn)對(duì)象與對(duì)象之間屬性的關(guān)聯(lián)——當(dāng)其中一方發(fā)生改變時(shí)另一方也隨之改變。
    2010-12-12
  • 淺析JSON序列化與反序列化

    淺析JSON序列化與反序列化

    以下是對(duì)JSON序列化與反序列化進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • ASP.NET線程相關(guān)配置

    ASP.NET線程相關(guān)配置

    ASP.NET 同一時(shí)刻只能發(fā)起的工作線程數(shù)量
    2012-12-12
  • asp.net 實(shí)現(xiàn)下拉框只讀功能

    asp.net 實(shí)現(xiàn)下拉框只讀功能

    下拉框只讀此功能并不是默認(rèn)的,需要手動(dòng)操作下,本文介紹javascript與asp.net實(shí)現(xiàn)下拉框只讀功能,需要了解的朋友可以參考一下
    2012-12-12
  • .NET 水晶報(bào)表使用代碼

    .NET 水晶報(bào)表使用代碼

    下面就是介紹在.net下,如何使用水晶報(bào)表的方法。
    2009-04-04
  • .Net?Core基于ImageSharp實(shí)現(xiàn)圖片縮放與裁剪

    .Net?Core基于ImageSharp實(shí)現(xiàn)圖片縮放與裁剪

    這篇文章介紹了.Net?Core基于ImageSharp實(shí)現(xiàn)圖片縮放與裁剪的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • .NET實(shí)現(xiàn)API版本控制

    .NET實(shí)現(xiàn)API版本控制

    這篇文章介紹了.NET實(shí)現(xiàn)API版本控制的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的方法介紹

    ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的方法介紹

    這篇文章主要給大家介紹了關(guān)于ASP.NET WebAPI2復(fù)雜請(qǐng)求跨域設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用ASP.NET具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • ASP.NET Cookie是怎么生成的(推薦)

    ASP.NET Cookie是怎么生成的(推薦)

    這篇文章主要介紹了ASP.NET Cookie是怎么生成的,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯)

    詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯)

    這篇文章主要介紹了詳解ASP.NET Core 2.0 路由引擎之網(wǎng)址生成(譯),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11

最新評(píng)論

任丘市| 亳州市| 嘉定区| 巧家县| 凤城市| 布尔津县| 阿坝县| 巴楚县| 上虞市| 通渭县| 定州市| 封开县| 洛川县| 长子县| 望奎县| 昭苏县| 湾仔区| 元氏县| 赤壁市| 什邡市| 竹溪县| 沁水县| 博客| 丰宁| 湘乡市| 嘉定区| 黄龙县| 台江县| 青州市| 红桥区| 象州县| 万载县| 五大连池市| 汉源县| 珠海市| 平舆县| 安西县| 安塞县| 平谷区| 绥阳县| 长汀县|