
یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شیگرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفهای و امکانات کامل!
مشاهده بیشتر
یادگیری MVC Core از مبانی تا پیشرفته: شیگرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژههای کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!
مشاهده بیشترمشخصات مقاله
آموزش بازنویسی URL در ASP.Net MVC Core
آموزش بازنویسی URL در ASP.NET Core 2.0
Problem
چگونگی بازنویسی URL در ASP.NET Core پیاده سازی. کنیم.
Solution
در فایل Startup ، RewriteOptions و middleware برای بازنویسی URL پیکربندی می کنیم(configure).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public void Configure( IApplicationBuilder app, IHostingEnvironment env) { var rewrite = new RewriteOptions() .AddRedirect( "films" , "movies" ) .AddRewrite( "actors" , "stars" , true); app.UseRewriter(rewrite); app.Run(async context => { var path = context.Request.Path; var query = context.Request.QueryString; await context.Response.WriteAsync($ "New URL: {path}{query}" ); }); } <button></button> |
اجرا کنید و به /films بروید. شما تغییر مسیر را متوجه خواهید شد.

اجرا کنید و به /actors بروید. شما تغییر مسیر را متوجه خواهید شد.

Discussion
URL Rewritingدرباره تغییر URL درخواست شده بر اساس قوانین سفارشی است تا آدرس را از منابع زیر جدا کند. این مسئله می تواند به دلایل امنیتی مانند SEO، user-friendly URL و تبدیل HTTP به HTTPS و غیره باشد.
هنگامی که شما قادر به استفاده از ویژگی های بازنویسی سرورهای وب نیستید (IIS, Apache, Nginx) ASP.NET Core یک گزینه متناوب را فراهم می کند، به عنوان مثال، Response Rewrite middleware.عملکرد و ویژگی های آن با ویژگی های بازنویسی سرور برابری نمی کند.
بازنویسی middleware قادر به انجام هر دو تغییر مسیر و بازنویسی است.
Redirect
این عملیات در client-side است و مانند این کار می کند:
- Client در خواست یک resource می کند برای مثال /films.
- سرور به طور محلی به مکان جدید نقشه می دهد برای مثال /stars و return 200(OK)
- Clientهیچ چیزی در مورد این فرایند داخلی نمی داند و هنوز URL درخواست شده را در نوار آدرس مشاهده می کند.
Rules
قوانین Redirect و Rewrite در واقع Regular Expressions هستند، جزئیات آن را می توانید در بخش "Useful Links" در زیر پیدا کنید.
Custom Rules
شما همچنین می توانید قوانین سفارشی را با ایجاد یک کلاس و اجرای رابط IRule ایجاد کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public class MoviesRedirectRule : IRule { private readonly string[] matchPaths; private readonly PathString newPath; public MoviesRedirectRule(string[] matchPaths, string newPath) { this.matchPaths = matchPaths; this.newPath = new PathString(newPath); } public void ApplyRule(RewriteContext context) { var request = context.HttpContext.Request; // if already redirected, skip if (request.Path.StartsWithSegments( new PathString(this.newPath))) { return ; } if (this.matchPaths.Contains(request.Path.Value)) { var newLocation = $ "{this.newPath}{request.QueryString}" ; var response = context.HttpContext.Response; response.StatusCode = StatusCodes.Status302Found; context.Result = RuleResult.EndResponse; response.Headers[HeaderNames.Location] = newLocation; } } } <button></button> |
قانون سفارشی می تواند به RewriteOptions اضافه شود.
1 2 3 4 5 | var rewrite = new RewriteOptions() .Add( new MoviesRedirectRule( matchPaths: new [] { "/films" , "/features" , "/albums" }, newPath: "/movies" )); <button></button> |
شما می توانید Source Code از لینک زیر دانلود کنید.