c# - एएसपी। नेट एमवीसी क्षेत्र पंजीकरण




asp.net asp.net-mvc (4)

आपका रूटिंग कोड मुझे ठीक लग रहा है क्या आप वाकई लॉगिन विधि में ठीक से प्रमाणीकृत हैं? बस अपने "श्रेणियों" नियंत्रक से [प्राधिकृत] टैग को हटाने का प्रयास करें और देखें कि क्या प्राधिकरण मुद्दा है।

मेरे "एडमिन" क्षेत्र पंजीकरण में थोड़ी समस्या है, जो कि "एडमिन" क्षेत्र फ़ोल्डर के अंदर AdminAreaRegistration.cs में संग्रहीत हैं I मेरे मार्ग इस तरह दिखते हैं:

        context.MapRoute(
            "Admin_News",
            "Admin/News",
            new { controller = "News", action = "Index" }
        );

        context.MapRoute(
            "Admin_Pages",
            "Admin/Pages",
            new { controller = "Pages", action = "Index" }
        );

        context.MapRoute(
            "Admin_Galleries",
            "Admin/Galleries",
            new { controller = "Galleries", action = "Index" }
        );

        context.MapRoute(
            "Admin_Categories",
            "Admin/Categories",
            new { controller = "Categories", action = "Index" }
        );

        context.MapRoute(
            "Admin_Products",
            "Admin/Products",
            new { controller = "Products", action = "Index" }
        );

        context.MapRoute(
            "Admin_Files",
            "Admin/Files",
            new { controller = "Files", action = "Index" }
        );

        context.MapRoute(
            "Admin_Orders",
            "Admin/Orders",
            new { controller = "Orders", action = "Index" }
        );

        context.MapRoute(
            "Admin_Codes",
            "Admin/Codes",
            new { controller = "Codes", action = "Index" }
        );

        context.MapRoute(
            "Admin_Login",
            "Admin/Login",
            new { controller = "Login", action = "Index" }
        );

        context.MapRoute(
            "Admin_Panel",
            "Admin",
            new { controller = "Index", action = "Index" }
        );

        context.MapRoute(
            "Admin_Default",
            "Admin/{controller}/{action}/{param}",
            new { param = UrlParameter.Optional }
        );

समस्या यह है: जब मुझे पोस्ट पर प्रवेश मिलता है तो मैं इसका इस्तेमाल करता हूं

return Redirect("~/Admin");

सब कुछ ठीक है, जब तक मैं लिंक पर क्लिक करना नहीं चाहता (जो अच्छी तरह से पैदा हो रहा है)

<li><a href="@Url.RouteUrl("Admin_Categories")">Categories</a></li> ==
<li><a href="~/Admin/Categories">Categories</a></li>

तो मुझे लगता है कि मुझे श्रेणी नियंत्रक की सूचकांक कार्रवाई पर पुनः निर्देशित किया जा रहा है, लेकिन इसके बजाय मुझे लॉगिन नियंत्रक की सूचकांक कार्रवाई पर पुनः निर्देशित किया गया है। कोई विचार क्यों ऐसा हो रहा है?

सादर!

1 संपादित करें:

ठीक है, मैंने Admin_Categories मार्ग को इस पर बदल दिया है:

context.MapRoute(
    "Admin_Categories",
    "Admin/Categories/{action}",
     new { controller = "Categories" }
);

यह काम करने लगता है, लेकिन अब यूआरएल क्रिया नाम के साथ पैदा कर रहा है, जो मुझे सूचकांक की कार्रवाई के मामले में ऐसा नहीं होगा:

<li><a href="@Url.RouteUrl("Admin_Categories")">Categories</a></li> ==
<li><a href="~/Admin/Categories/Index">Categories</a></li>

मैं यूआरएल से क्रिया का नाम कैसे निकाल सकता हूं?

2 संपादित करें

ठीक है, तो किसी भी तरह मेरे ब्राउज़र कैश्ड कैटलॉग नियंत्रक सूचकांक कार्रवाई दृश्य लॉगिन नियंत्रक सूचकांक कार्रवाई दृश्य के रूप में। ब्राउज़र कैश को साफ़ करने के बाद थोड़ी देर के लिए समस्या हल हो गई थी मैंने सभी विचारों के लिए कैश विशेषता नीचे का इस्तेमाल किया (बस वरीबेपाम के उपयोग के लिए पैरामीटर की जरूरत है):

[OutputCache(CacheProfile = "OneDayCache")]

लेकिन यहां तक ​​कि कैश समाशोधन समस्या की मरम्मत नहीं करता है। फिर भी मैं लॉगिन नियंत्रक सूचकांक कार्रवाई करने के लिए पुनः निर्देशित हो रहा हूँ ... किसी भी विचार?

3 संपादित करें

मैंने उन क्षेत्ररचियों का इस्तेमाल किया:

context.MapRoute(
    "Admin_Categories",
    "Admin/Categories",
    new { controller = "Categories", action = "Index", param = UrlParameter.Optional },
    new[] { "AMBIT_CMS_MVC.Areas.Admin.Controllers" }
);

context.MapRoute(
    "Admin_Default",
    "Admin/{controller}/{action}/{param}",
    new { controller = "Index", action = "Index", param = UrlParameter.Optional },
    new[] { "AMBIT_CMS_MVC.Areas.Admin.Controllers" }
    );

मैंने इसे रूट यूआरएल बनाने के लिए प्रयोग किया था:

@Url.RouteUrl("Admin_Categories")

लेकिन अभी भी काम नहीं कर रहा है जितना चाहिए। व्यवस्थापक मार्ग ग्लोबल.एएसएक्स में पंजीकृत हैं और वहां कोई ऐसा मार्ग नहीं है जो उन पर ओवरराइड कर सकता है ...

4 संपादित करें

मैंने पाया है कि मेरी समस्या कैशिंग है क्रोम को किसी तरह कैश / व्यवस्थापक / कैरेबियन स्थान कैश / एडमिन / लॉन्ग के रूप में कैश करता है, इसलिए जब मैं यूआरएल / एडमिन / कैटेगरी कैश मारता हूं तो उसे / एडमिन / लॉगिन में रीडायरेक्ट किया जाता है।

मैं आउटपुट कैश विशेषता का उपयोग करता हूं, लेकिन यह ठीक से काम नहीं कर रहा है।

[OutputCache(CacheProfile = "OneDayCache", VaryByCustom = "Url")]
public ActionResult Index(){...}

VaryByCustom सेट ग्लोबल.एएसएक्स में:

public override string GetVaryByCustomString(HttpContext context, string arg)
    {
        if (arg.Equals("Url"))
        {
            string url = !string.IsNullOrWhiteSpace(context.Request.Url.AbsoluteUri) ? context.Request.Url.AbsoluteUri : string.Empty;
            return "Url=" + url;
        }
        return base.GetVaryByCustomString(context, arg);
    }

http://localhost:50945/Admin/Categories
HTTP/1.1 302 Found
Cache-Control: private, max-age=86400
Content-Type: text/html; charset=utf-8
Expires: Thu, 09 Feb 2017 20:24:19 GMT
Last-Modified: Wed, 08 Feb 2017 20:24:19 GMT
Location: /Admin/Login
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?TTpcUHJvamVrdHlcQU1CSVQtQ01TLU1WQ1xBTUJJVCBDTVMgTVZDXEFkbWluXENhdGVnb3JpZXM=?=
X-Powered-By: ASP.NET
Date: Wed, 08 Feb 2017 20:24:19 GMT
Content-Length: 439

शायद यह VaryByCustom काम नहीं कर रहा है क्या इसे ठीक करने का कोइ उपाय है?


क्या आपने मार्ग नियंत्रकों के साथ अपने नियंत्रक वर्ग को सजाने की कोशिश की है?

[Area("Admin")]
[Route("Categories")]
public class CategoriesController : Controller

यह मेरे लिए इसी तरह के मुद्दे पर काम करता था, मैं एएसपीएनईटी कोर का प्रयोग कर रहा था, हालांकि, एमवीसी का कौन सा संस्करण आप उपयोग कर रहे हैं?


यह MVC में क्षेत्र विशेषता का एक बुनियादी कार्यान्वयन है:

आपके AdminAreaRegistration.cs में:

context.MapRoute(
    "admin_default",
    "admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional }
);

अपने नियंत्रकों को सजाने के साथ:

[Area("Admin")]
public class MyController : Controller

साथ ही, आपको global.asax में कोड की निम्न पंक्ति जोड़ने के लिए मत भूलना, आप पर Application_Start() विधि (सब कुछ ऊपर):

AreaRegistration.RegisterAllAreas();

दृश्य उपयोग में:

Url.Action("Index", "Categories", new { Area = "Admin" })

इस तरह से सिर्फ ठीक काम करना चाहिए परीक्षण!


बस ऐसा करो, इस तरह:

मार्ग कॉन्फ़िग में:

routes.MapRoute(
         name: "mesaj_fiyatsor",
         url: "mesaj/fiyatsor/{kimeId}/{kimdenId}/{stokId}",
         defaults: new { controller = "mesaj", action = "fiyatsor", kimeId = "", kimdenId = "", stokId = "" },
         namespaces: new string[] { "ProjectName.Bla.Controllers" }
       );

क्षेत्र पंजीकरण में:

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
            new[] { "ProjectName.Bla.Areas.Bla.Controllers" }
        );

फिर:

@Url.Action("index", "destek", new { area="bla"})




area