نحوه کار کردن با میان افزار بازنویسی URL در ASP.NET

شنبه 11 آبان 1398

بازنویسی URL در ASP.NET اهمیت بسیار زیادی دارد، ما در این مطلب قصد داریم نحوه کار کردن با میان افزار بازنویسی URL در ASP.NET را به شما آموزش دهیم.

 نحوه کار کردن با میان افزار بازنویسی URL در ASP.NET

بازنویسی URL در واقع فرایندی است که در آن اقدام به جایگزین کردن URL های درخواستی بر اساس یک یا چند قانون از پیش تعریف شده می کنند. شما می توانید از میان افزار بازنویسی URL در ASP.NET استفاده کنید تا بتوانید به راحتی با URL ها کار کنید. ما در این مطلب قصد داریم درباره این موضوع صحبت کنیم که چگونه می توان میان افزار بازنویسی URL در ASP.NET را پیاده سازی کرد. برای مطالعه این مقاله حتما به این موضوع توجه داشته باشید که برای کار کردن با نمونه کدهایی که در این مقاله نشان داده شده اند شما باید نسخه 2019 ویژوال استودیو را نصب کنید.


ساخت یک پروژه ASP.NET در ویژوال استودیو برای بازنویسی URL

اول از همه اجازه دهید که یک پروژه جدید ASP.NET را در ویژوال استودیو بسازیم. ما در اینجا فرض می کنیم که شما ویژوال استودیو نسخه 2019 را بر روی سیستم خود نصب کرده اید. برای ساخت یک پروژه جدید کافی است که مراحلی که در ادامه برای شما آورده ایم را انجام دهید.

-          IDE ویژوال استودیو را اجرا کنید.

-          بر روی گزینه Create new project کلیک کنید.

-          در پنجره Create new project که برای شما باز می شود گزینه ASP.NET Core Web Application را از لیستی که برای شما نشان داده می شود انتخاب کنید.

-          بر روی گزینه Next کلیک کنید.

-          در پنجره Configure your new project که برای شما باز می شود نام و محل ذخیره پروژه خود را تعیین کنید.

-          بر روی گزینه Create کلیک کنید.

-          در پنجره Create New ASP.NET Core Web Application که در مرحله بعدی برای شما باز می شود گزینه  .NET Core به عنوان ران تایم و ASP.NET Core 2.2 و یا نسخه های بعدی را از لیستی که برای شما نشان داده می شود انتخاب کنید. من در اینجا از  ASP.NET Core 3.0 استفاده کرده ام.

-          گزینه API را به عنوان قالب پروژه خود انتخاب کنید تا بتوانید یک ASP.NET Core API جدید را بسازید.

-          اطمینان حاصل کنید که گزینه های Enable Docker Support و Configure for HTTPS تیک زده نشده باشند چرا که ما در این پروژه قصد نداریم از این ویژگی ها استفاده کنیم.

-          مطمئن شوید که ویژگی Authentication بر روی گزینه No Authentication تنظیم شده باشد چرا که ما در این پروژه قصد نداریم از authentication استفاده کنیم.

-          بر روی گزینه Create کلیک کنید.

اکنون شما باید یک پروژه جدید ASP.NET Core API را در ویژوال استودیو داشته باشید. ما از این پروژه برای کار کردن با میان افزار بازنویسی URL در ASP.NET استفاده خواهیم کرد.

 بازنویسی URL


میان افزار بازنویسی URL را از طریق NuGet نصب کنید

اکنون که شما یک اپلیکیشن جدید ASP.NET Core را در ویژوال استودیو ساخته اید اقدام بعدی که باید انجام دهید این است که پکیج های مورد نیاز را از طریق NuGet نصب کنید. برای کار کردن با میان افزار بازنویسی URL در ASP.NET شما باید پکیج Microsoft.AspNetCore.Rewrite را بر روی پروژه خود در ویژوال استودیو نصب کنید.

شما می توانید این پکیج را از طریق پکیج منیجر NuGet که درون ویژوال استودیو نسخه 2019 قرار دارد نصب کنید. از طرف دیگر شما می توانید دستور زیر را اجرا کنید تا بتوانید این پکیج را از طریق .NET CLI نصب کنید.

dotnet add package Microsoft.AspNetCore.Rewrite

 بازنویسی URL


تغییر مسیر URL و بازنویسی آن

نکته مهمی که باید به آن توجه داشته باشید این است که تغییر مسیر URL و بازنویسی URL یکسان نیستند. در تغییر مسیر URl سرور یک کد وضعیت HTTP 301 یا 302 را به سمت کاربر برمی گرداند و از کاربر می پرسد که قصد دارد به منابع با استفاده از یک URL دیگر دسترسی داشته باشد یا خیر؟ بعد از آن کلاینت باید URL را به شکل مناسبی به روز رسانی کند و با استفاده از یک URL جدید به منابع دسترسی پیدا کند. بنابراین به عبارتی دیگر می توان گفت که تغییر مسیر URL در سمت کلاینت اتفاق می افتد، یعنی این یک عملکرد سمت کلاینت است.

در طرف مقابل بازنویسی URL یک عملکرد سمت سرور است. این عملکرد در واقع پروسه اصلاح URL درخواستی بر اساس یک یا چند قانون از پیش تعیین شده است. در بازنویسی URl، URL بازنویسی شده به سمت کلاینت بازگردانده نمی شود، به همین علت است که کلاینت هیچ وقت متوجه نمی شود که منبعی که دریافت می کند از یک محل متفاوت با محلی که کاربر درخواست خود را وارد کرده است می باشد. توجه داشته باشید که بازنویسی URL یک چیز جدید نیست و در واقع یکی از امکانات بسیار قدیمی ASP.NET به شمار می آید. نکته دیگر این است که بازنویسی URL در سمت سرور اتفاق می افتد و نیازی نیست که کلاینت اطلاعاتی را از سمت سرور دریافت کرده و به آن پاسخ دهد.

 بازنویسی URL


تنظیم تغییر مسیر URL در ASP.NET

شما می توانید تنظیمات مربوط به بازنویسی URL و تغییر مسیر URL را در کلاس Startup انجام دهید. در متد Configure از فایل  Startup.cs قطعه کد زیر را برای تغییر مسیر درخواست های HTTP به HTTPS اضافه کنید.

app.UseRewriter(new RewriteOptions()

               .AddRedirectToHttps());

 بازنویسی URL


تنظیمات بازنویسی Url در ASP.NET

قطعه کد زیر نشان دهنده یک مثال از بازنویسی Url است، توجه داشته باشید که چگونه url درخواستی با استفاده از متد AddRewrite اصلاح می شود.

var rewrite = new RewriteOptions()

               .AddRewrite("api/values", "api/default", true);

               app.UseRewriter(rewrite);

زمانی که شما اپلیکیشن را اجرا می کنید می توانید مشاهده کنید که متد HttpGet که برای Default Controller است فراخوانی می شود اما مرورگر وب به شما این URL را نمایش می دهد:

http://localhost:52137/api/values

نکته بسیار مهم دیگر نیز این است که شما همچنین می توانید با استفاده از عبارت های regex به شکلی که در ادامه برای شما آورده ایم قوانین را تعیین کنید.

var rewrite = new RewriteOptions()

                 .AddRewrite(@"^Home/User?Code=(\d+)", "Home/$1", true);

                  app.UseRewriter(rewrite);

 بازنویسی URL


ساخت قوانین شخصی سازی شده برای این کار در ASP.NET

برای کار کردن با قوانین پیشرفته تر شما باید اقدام به ساخت یک قانون شخصی سازی شده کنید. برای انجام این کار شما نیاز دارید که یک کلاس بسازید که از اینترفیس IRule ارث بری کرده باشد و متد Apply Rule در آن پیاده سازی شده باشد. ما نحوه انجام این کار را در ادامه برای شما آورده ایم:

public class CustomRule : Microsoft.AspNetCore.Rewrite.IRule

    {

        public void Apply Rule(Rewrite Context context)

        {

            throw new NotImplementedException();

        }

    }

قطعه کدی که در ادامه برای شما آورده ایم به شما نشان می دهد که متد Apply Rule چگونه مورد استفاده قرار می گیرد. توجه داشته باشید که متد Apply Rule که در اینجا آورده شده است تنها برای اهداف آموزشی مورد استفاده قرار می گیرد. شما می توانید بعدها مطابق با نیازهای خود این متد را تغییر دهید.

public class CustomRule : Microsoft.AspNetCore.Rewrite.IRule

    {

        public void Apply Rule(Rewrite Context context)

        {

            var request = context.HttpContext.Request;

            var host = request.Host;

            if (host.Host.Contains("localhost",

             StringComparison.OrdinalIgnoreCase))

            {

                if(host.Port == 80)

                {

                    context.Result = Rule Result.Continue Rules;

                    return;

                }               

            }

            var response = context.HttpContext.Response;

            response.StatusCode = (int)HttpStatusCode. Bad Request;

            context.Result = RuleResult.EndResponse;

        }

    }

اضافه کردن این قانون شخصی سازی شده به مجموعه قوانین در ASP.NET

شما می توانید قانون شخصی سازی شده خود را به مجموعه قوانین در متد Configure اضافه کنید که ما نحوه انجام این کار را در ادامه برای شما آورده ایم:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

  {

            var options = new RewriteOptions();

            options.Rules.Add(new Custom Rule())

            app.UseRewriter(options);

  }

بازنویسی URl در واقع آدرس را از منبعی که برای آن آدرس است جدا می کند. شما می توانید از این امکان برای ایجاد URL های کاربر پسند تر استفاده کنید که به خاطر سپردن آنها برای کاربران شما راحت تر است. علاوه بر این، شما با این کار می توانید اقدام به بهینه سازی نتایج موتورهای جستجو کنید که این کار نیز مزایای زیادی برای شما دارد.

 بازنویسی URL

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید