نظرات مطالب
استفاده از pjax بجای ajax در ASP.NET MVC
- فقط در مرورگرهایی پشتیبانی میشود که push state را پیاده سازی کرده باشند: لیست کامل آنها
- اگر مرورگری history.pushState API را پشتیبانی نکند، بارگذاری صفحات آن معمولی خواهند بود (شبیه به حالت بارگذاری کامل برای موتورهای جستجو؛ بدون از کار افتادن برنامه).
- اگر مرورگری history.pushState API را پشتیبانی نکند، بارگذاری صفحات آن معمولی خواهند بود (شبیه به حالت بارگذاری کامل برای موتورهای جستجو؛ بدون از کار افتادن برنامه).
یکی از مسائلی که همیشه برای وب سایت، از نظر موتورهای جستجو بسیار مهم است، مقوله SEO Friendly بودن آدرسهاست. خوشبختانه در ASP.NET MVC این مقوله به خوبی پوشش داده شده است. برای مثال این قابلیت در ASP.NET Webforms توسط بسته نرم افزاری به نام ASP.NET FriendlyUrls توسط تیم توسعه دهنده ASP.NET ارائه شده است. در این زمینه قبلا آقای کاویانی در همین سایت در صفحه مروری بر قابلیت جدید ASP.NET FriendlyUrls
به این مقوله پرداختهاند و با مثال، نحوهی استفاده از این بستهی نرم افزاری را آموزش دادهاند.
یکی از مسائلی که در ASP.NET Webforms با آن مواجهبودیم انتقال دائمی آدرسهای صفحات یا همان Permanent Redirect بود.
در واقع زمانیکه شما در حالت عادی از بستهی نرم افزاری مذکور استفاده میکنید، این افزونه باعث SEO Friendly شدن آدرسهای صفحات شما میگردد. با در نظر گرفتن اینکه شما مطلب مروری بر قابلیت جدید ASP.NET FriendlyUrls را مطالعه کرده اید، به فرض مثال کد زیر:
و رجیستر کردن آن در RouteTable سایت به صورت زیر در فایل Global
باعث میشود که با زدن آدرس https://www.dntips.ir/sitemap.xml آدرس https://www.dntips.ir/sitemap.aspx لود شود؛ اما در نوار آدرس، همان آدرس sitemap.xml باقی خواهد ماند.
در این روش در صورتیکه کاربر آدرس https://www.dntips.ir/sitemap.aspx را در مرورگر خود تایپ کند باز هم سایت کار میکند (آدرس مورد نظر در دسترس است) و فاجعه زمانی شروع میشود که موتور جستجو، با محتوی تکراری در سایت در دو آدرس مختلف مواجه شود (پست آقای نصیری را در بهبود SEO در ASP.NET MVC بررسی کنید) .
یا زمانیکه شما صفحات قدیمی دارید و میخواهید آنها را به آدرسهای جدید منتقل کنید. برای رفع این مشکل طوریکه هر زمان آدرس قدیمی هم وارد سیستم مسیریابی سایت شود به صورت اتوماتیک به آدرس جدید به صورت دائم منتقل شود، میتوانید کد بالا را به صورت زیر اصلاح نمایید:
با این تنظیمات، سیستم مسیریابی ملزم به انتقال دائمی آدرس، به آدرس جدید خواهد شد. یعنی شما حتی اگر آدرس https://www.dntips.ir/sitemap.aspx را وارد نمایید مسیریاب سایت برای آدرس مورد نظر، وضعیت 301 Moved Permanently را مقدار دهی کرده و فقط آدرس https://www.dntips.ir/sitemap.xml به عنوان آدرس اصلی در نظر گرفته خواهد شد.
یکی از مسائلی که در ASP.NET Webforms با آن مواجه
در واقع زمانیکه شما در حالت عادی از بستهی نرم افزاری مذکور استفاده میکنید، این افزونه باعث SEO Friendly شدن آدرسهای صفحات شما میگردد. با در نظر گرفتن اینکه شما مطلب مروری بر قابلیت جدید ASP.NET FriendlyUrls را مطالعه کرده اید، به فرض مثال کد زیر:
public static class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.EnableFriendlyUrls(); routes.MapPageRoute("Sitemap", "sitemap.xml", "~/sitemap.aspx"); } }
protected void Application_Start(object sender, EventArgs e) { RouteConfig.RegisterRoutes(RouteTable.Routes); }
در این روش در صورتیکه کاربر آدرس https://www.dntips.ir/sitemap.aspx را در مرورگر خود تایپ کند باز هم سایت کار میکند (آدرس مورد نظر در دسترس است) و فاجعه زمانی شروع میشود که موتور جستجو، با محتوی تکراری در سایت در دو آدرس مختلف مواجه شود (پست آقای نصیری را در بهبود SEO در ASP.NET MVC بررسی کنید) .
یا زمانیکه شما صفحات قدیمی دارید و میخواهید آنها را به آدرسهای جدید منتقل کنید. برای رفع این مشکل طوریکه هر زمان آدرس قدیمی هم وارد سیستم مسیریابی سایت شود به صورت اتوماتیک به آدرس جدید به صورت دائم منتقل شود، میتوانید کد بالا را به صورت زیر اصلاح نمایید:
public static void RegisterRoutes(RouteCollection routes) { routes.EnableFriendlyUrls(new FriendlyUrlSettings() { AutoRedirectMode = RedirectMode.Permanent, ResolverCachingMode = ResolverCachingMode.Dynamic }); routes.MapPageRoute("Sitemap", "sitemap.xml", "~/sitemap.aspx"); }
SeoTags Create all SEO tags you need such as meta, link, twitter card (twitter:), open graph (og:), and JSON-LD schema (structred data).
Sample output:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin /> <link rel="preconnect" href="https://www.google-analytics.com" crossorigin /> <link rel="dns-prefetch" href="https://fonts.gstatic.com/" /> <link rel="dns-prefetch" href="https://www.google-analytics.com" /> <link rel="preload" as="style" href="https://site.com/site.css" /> <link rel="preload" as="script" href="https://site.com/app.js" /> <link rel="preload" as="font" type="font/woff2" href="https://site.com/fonts/Font.woff2" crossorigin /> <link rel="preload" as="font" type="font/woff2" href="https://site.com/fonts/Font_Light.woff2" crossorigin /> <link rel="preload" as="font" type="font/woff2" href="https://site.com/fonts/Font_Medium.woff2" crossorigin /> <link rel="preload" as="font" type="font/woff2" href="https://site.com/fonts/Font_Bold.woff2" crossorigin /> <link rel="preload" as="image" type="image/jpeg" href="https://site.com/uploads/image.jpg" /> <title>SEO Tags for ASP.NET Core - My Site Title</title> <meta name="title" content="SEO Tags for ASP.NET Core - My Site Title" /> <meta name="description" content="Create all SEO tags you need such as meta, link, twitter card (twitter:), open graph (og:), and ..." /> <meta name="keywords" content="SEO, AspNetCore, MVC, RazorPages" /> <meta name="author" content="Author Name" /> <link rel="author" href="https://github.com/author-profile" /> <link rel="canonical" href="https://site.com/url/" /> <link rel="application/opensearchdescription+xml" title="My Site Title" href="https://site.com/open-search.xml" /> <link rel="alternate" type="application/rss+xml" title="Post Feeds" href="https://site.com/rss/" /> <link rel="alternate" type="application/rss+xml" title="Post Comments" href="https://site.com/post/comment/rss" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:title" content="SEO Tags for ASP.NET Core" /> <meta name="twitter:description" content="Create all SEO tags you need such as meta, link, twitter card (twitter:), open graph (og:), and ..." /> <meta name="twitter:site" content="@MySiteTwitter" /> <meta name="twitter:creator" content="@MyTwitterId" /> <meta name="twitter:image" content="https://site.com/uploads/image.jpg" /> <meta name="twitter:image:width" content="1280" /> <meta name="twitter:image:height" content="720" /> <meta name="twitter:image:alt" content="Image alt" /> <meta property="og:type" content="article" /> <meta property="og:title" content="SEO Tags for ASP.NET Core" /> <meta property="og:description" content="Create all SEO tags you need such as meta, link, twitter card (twitter:), open graph (og:), and ..." /> <meta property="og:url" content="https://site.com/url/" /> <meta property="og:site_name" content="My Site Title" /> <meta property="og:locale" content="en_US" /> <meta property="og:image" content="https://site.com/uploads/image.jpg" /> <meta property="og:image:secure_url" content="https://site.com/uploads/image.jpg" /> <meta property="og:image:type" content="image/jpeg" /> <meta property="og:image:width" content="1280" /> <meta property="og:image:height" content="720" /> <meta property="og:image:alt" content="Image alt" /> <meta property="article:publisher" content="https://facebook.com/MySite" /> <meta property="article:author" content="https://facebook.com/MyUserId" /> <meta property="article:published_time" content="2021-07-03T13:34:41+00:00" /> <meta property="article:modified_time" content="2021-07-03T13:34:41+00:00" /> <meta property="article:section" content="Article Topic" /> <meta property="article:tag" content="SEO" /> <meta property="article:tag" content="AspNetCore" /> <meta property="article:tag" content="MVC" /> <meta property="article:tag" content="RazorPages" /> <meta property="og:see_also" content="https://site.com/see-also-1" /> <meta property="og:see_also" content="https://site.com/see-also-2" /> ...
اشتراکها
ایجاد خصوصیات اعتبار سنجی سفارشی
run custom tool رو اجرا کردید؟
با سلام؛ من همه نکات مطرح شده در آموزش رو به دقت پیاده سازی کردم . فقط تنها مشکلی که دارم اینکه وقتی کاربری رو میخوام ثبت نام کنم عملیات ثبت نام انجام میشه ولی خطای JwtBearerEvents: Error: Authentication failed رو هم دارم که طبیعتا باعث مشکلاتی در اعتبارسنجی توکنها میشه. inner exception خطای مربوطه هم به این صورته:
"Microsoft.IdentityModel.Tokens.SecurityTokenExpiredException: IDX10223: Lifetime validation failed. The token is expired. ValidTo: '[PII is hidden. For more details, see https://aka.ms/IdentityModel/PII.]', Current time: '[PII is hidden. For more details, see https://aka.ms/IdentityModel/PII.]'.\r\n
The previews of EF Core 5.0 require .NET Standard 2.1. This means:
- EF Core 5.0 runs on .NET Core 3.1; it does not require .NET 5.
- This may change in future previews depending on how the plan for .NET 5 evolves.
- EF Core 5.0 runs on other platforms that support .NET Standard 2.1.
- EF Core 5.0 will not run on .NET Standard 2.0 platforms, including .NET Framework.