.NETのコア開発の実際の戦闘(レッスン25:ルーティングおよびエンドポイント:どれだけあなたのWeb APIを計画する) - 研究ノート()

25 |ルーティングおよびエンドポイント:もあなたのWeb APIを計画する方法

存在しているASP.NET MVCフレームワーク内のシステムのルーティングは、ASP.NETコアフレームワークの内部に改善されています

ルーティングシステムの中心的役割は、URLとコントローラのアプリケーションとの間のマッピングの対応をいいます

このマッピング関係は、実際には2つの効果があります。

図1に示すように、上記URLは、コントローラに対応する対応するアクションにマップされ

2、コントローラ名とアクション名によればURLを生成します

.NETのコアは、ルーティング登録の2つの方法があります。

1、ルーティングテンプレートの方法

2、RouteAttribute方法

シーンに適用されたどちらの方法でも同じではありません

伝統的な方法の前に道をテンプレートルーティング、それがページのWeb MVC構成として使用することができます

それを行うにはRouteAttributeの方法を使用するときに今のWeb APIの定義は、より多くの建築の分離の終了前と後に使用します

ルーティング定義されたプロセスの途中で、経路登録、重要な特徴があり、ルーティングの制約であるルートを照合する方法であります

いくつかの簡単な制約があります。

1、型制約

2、制約の範囲

3、正規表現

4、必須かどうか

5、カスタムIRouteConstraint

さらにルーティングキーシステムは、逆ルートURLアドレスに生成された情報に基づいて、2つのクラスを提供します

1、LinkGenerator

2、IUrlHelper

MVCHelperの内部のようなMVCフレームワークとIUrlHelper

LinkGeneratorリンクは新しいオブジェクトを生成するために提供されると、それは、任意の位置でオブジェクトにコンテナ内から取得した後、必要なURLアドレスを生成することができ

次に、コードを見ます

ソースリンク:
https://github.com/witskeeper/geektime/tree/master/samples/RoutingDemo

グループ闊歩コードを登録するには、ここで、プレゼンテーションを容易にするために、ウェブAPIの出力が闊歩の視覚的なインターフェイスを介して出てくるだろう

ASP.NETコアに対応する闊歩パケットの紹介

Swashbuckle.AspNetCore

SWAGGERに注入されたコードのドキュメントのXMLドキュメント

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
    var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
    c.IncludeXmlComments(xmlPath);
});

闊歩は、ミドルウェア内部に登録しました

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});

この方法は、あなたは、インターフェイス上で闊歩インタフェースを参照してください、そして私たちのAPIが定義されて閲覧することができます

ルートの定義が続くOrderController

namespace RoutingDemo.Controllers
{
    [Route("api/[controller]/[action]")]// RouteAttribute 的方式
    [ApiController]
    public class OrderController : ControllerBase
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">必须可以转为long</param>
        /// <returns></returns>
        [HttpGet("{id:MyRouteConstraint}")]// 这里使用了自定义的约束
        public bool OrderExist(object id)
        {
            return true;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id">最大20</param>
        /// <returns></returns>
        [HttpGet("{id:max(20)}")]// 这里使用了 Max 的约束
        public bool Max(long id)
        {
            return true;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="ss">必填</param>
        /// <returns></returns>
        [HttpGet("{name:required}")]// 必填约束
        public bool Reque(string name)
        {
            return true;
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="number">以三个数字开始</param>
        /// <returns></returns>
        [HttpGet("{number:regex(^\\d{{3}}$)}")]// 正则表达式约束
        public bool Number(string number)
        {
            return true;
        }
    }
}

上記の使用カスタム制約MyRouteConstraint

namespace RoutingDemo.Constraints
{
    public class MyRouteConstraint : IRouteConstraint
    {
        public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (RouteDirection.IncomingRequest == routeDirection)
            {
                var v = values[routeKey];
                if (long.TryParse(v.ToString(), out var value))
                {
                    return true;
                }
            }
            return false;
        }
    }
}

登録MyRouteConstraint

services.AddRouting(options =>
{
    options.ConstraintMap.Add("MyRouteConstraint", typeof(MyRouteConstraint));
});

それが発効する前に、必要がミドルウェアの登録とUseEndpointsのMapControllersの使用にUseEndpoints位置を注入します

app.UseEndpoints(endpoints =>
{
    // 使用 RouteAttribute
    endpoints.MapControllers();
});

この射出ルートの着信OrderControllerなどの方法により、

プログラムを起動し、あなたは5つのインタフェースの合計を見ることができます

最初のインターフェイスは、クリック入力パラメータの後にそれを試して、達成するために私たちをカスタムバインドされます

20の第2のインタフェース制約最大

5、実行を入力します。

応答コードが200であることがわかります

25を入力し、実行

あなたはそれがルートを照合することができなかったと述べ、応答コードが404で見ることができます

インタフェースは、NULL値を入力する方法がないため、第三のパラメータは、フロントエンドの検証、必要とされます

第四のインターフェイスは、正規表現に沿って3桁、入力234、応答コード200で始まります

クリエイティブコモンズライセンス

この作品は、ある非営利- -同一条件許諾4.0の国際ライセンス契約クリエイティブ・コモンズのライセンスのために。

転載、使用、再投稿へようこそ、しかし鄭Ziming(リンクを含む:http://www.cnblogs.com/MingsonZheng/)によって署名された記事を保つようにしてください、商業目的のために使用してはならない、紙のライセンス変更に基づいて、同じ作業を公開するようにしてください。

ご質問があれば、私に連絡してください([email protected])。

おすすめ

転載: www.cnblogs.com/MingsonZheng/p/12508156.html