نمایش نتایج 1 تا 3 از 3

نام تاپیک: حذف Index در url

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    پست
    73

    Question حذف Index در url

    سلام خدمت همه دوستان عزیز.
    یه سوال داشتم. یه سایت داریم که یک کنترلر داره به اسم Products. یک اکشن به اسم Index هم داره که یه ورودی id هم میگیره. ما سه نوع آدرس داریم :
    اول فرض می کنیم یک محصول داریم به اسم My-Software و با شناسه(id) 5
    www.domain.com/Products که با فراخوانی این آدرس، کاربر لیست محصولات را مشاهده می کند.
    www.domain.com/Products/My-Software که با فراخوانی این آدرس صفحه معرفی محصول My-Software نمایش داده می شود.
    www.domain.com/Products/5 که با فراخوانی این آدرس میخوام به لینک بالا ریدایرکت 302 بشه. (RedirectPermanent)

    من تو فایل RouteConfig این کد رو اضافه کردم:

    routes.MapRoute(
    name: "Products",
    url: "Products/{id}",
    defaults: new { controller = "Products", action = "Index", id = UrlParameter.Optional }
    );


    اکشن Index هم به این صورت نوشته :

    public ActionResult Index(string id)
    {
    if (string.IsNullOrEmpty(id))
    {
    var ProductList = repP.GetProductList();
    return View(ProductList);
    }
    else
    {
    try
    {
    int pid = Convert.ToInt32(id);
    var p = repP.GetProductByID(pid);
    if (p != null)
    return RedirectToActionPermanent("", "Products", new { id = p.prdxtraUrlTitle });
    else
    return RedirectToAction("");
    }
    catch (Exception)
    {
    var p = repP.GetProductByUrl(id);
    if (p != null)
    return View("Product", p);
    else
    return RedirectToAction("");
    }
    }
    }


    مشکل اینجاست که الان چون اکشن Index داریم این url ها رو هم داریم :
    www.domain.com/Products/Index/My-Software
    www.domain.com/Products/Index/1
    و چون این url ها تو گوگل ایندکس میشه تو سئو به مشکل میخوریم. چون داپلیکیت محسوب میشه. دو تا آدرس با محتوای یکسان.
    در واقع من می خوام فقط یک URL داشته باشم که اینه : www.domain.com/Products/My-Software

    به همین دلیل اومدم توی action اینطوری نوشتم که اگر با لینکی که با id که عددی بود اومد، ریدایرکت کنه به لینک با اسم محصول. نمی دونم چرا تو URL نهایی اینو میاره : www.domain.com/Products/Index/My-Software
    اصلا چطوری می تونم این Index رو ورش دارم؟ نمیخوام Index داشته باشم تو url ها.
    ممنون میشم راهنماییم کنید. سپاس.

  2. #2
    کاربر دائمی آواتار _behnam_
    تاریخ عضویت
    مهر 1389
    محل زندگی
    سونای ایران ( بوشهر )
    پست
    988

    نقل قول: حذف Index در url

    سلام
    میتونید از Attribute Routing استفاده کنید
    قدم اول از کلاس RouteConfig.cs باید Attribute Routing فعال کنید , با قرار دادن کد routes.MapMvcAttributeRoutes();


    public static void RegisterRoutes(RouteCollection routes)
    {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
    }


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

    [Route("Products/My-Software/{id}")]
    public ActionResult Index(string id)

    درضمن بهتره که نوع پارامتر های کنترلر نزدیک به نوع آرگومان هایی ورودی باشه تا کدهای کمتری رو بخواید بنویسید.
    مثلا نوع پارامتر Id بجای string بهتره int تعریف بشه تا کدهای تبدیل و try/catch اضافی حذف بشه



    [Route("Products/My-Software/{id}")]
    public ActionResult Index(int? id)




    id.HasValue return true if not null
    id.GetValueOrDefault() return 0 if null or return > 0 if not null



  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    تهران
    پست
    73

    نقل قول: حذف Index در url

    ممنون از شما. با تغییراتی در کدهای ارسالی شما، مشکل بنده حل شد. سپاس فراوان.

تاپیک های مشابه

  1. سوال: فرق local index و global index در اوراکل چیست؟
    نوشته شده توسط minooladybird در بخش Oracle
    پاسخ: 3
    آخرین پست: شنبه 23 اسفند 1393, 19:34 عصر
  2. پاسخ: 3
    آخرین پست: پنج شنبه 22 اردیبهشت 1390, 09:31 صبح
  3. تغییر صفحه پیش فرض بر روی سرور از index.html به index.aspx
    نوشته شده توسط hosseintaheri در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: دوشنبه 14 دی 1383, 00:27 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •