SO

2015-05-20 6 views
11

के समान यूआरएल रीराइटिंग को कार्यान्वित करने के लिए मुझे अपनी एएसपीनेट एमवीसी साइट पर कार्यक्षमता जैसे एसओ को कार्यान्वित करने की आवश्यकता है।SO

उदाहरण के लिए जब उपयोगकर्ता विषय पंक्ति लोड हो रहा है यूआरएल और यूआरएल के साथ concatenated है के बाद https://stackoverflow.com/questions/xxxxxxxx

करने के लिए जाना यह https://stackoverflow.com/questions/xxxxxxxx/rails-sql-search-through-has-one-relationship

से ऊपर "/ की तरह हो जाता है रेल-एसक्यूएल-खोज-थ्रू-है-एक- रिश्ता "भाग यूआरएल में जोड़ा जाता है।

वेबफॉर्म में यह आसान है, मैं केवल यूआरएल पुनर्लेखन का उपयोग कर सकता हूं। लेकिन यकीन नहीं कैसे MVC

में यह पूरा करने के निम्न पंक्ति Global.asax से दायर किया गया है

 routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults 
     ); 

स्ट्रिंग है कि मैं श्रेणीबद्ध करने की जरूरत है मेरी डेटाबेस में है, इसलिए यह वहाँ से हासिल करेगा। मैं यह कैसे हासिल कर सकता हूं?

+6

इसे एक स्लग कहा जाता है। [इस ब्लॉग का संदर्भ लें] (http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/) एक एक्शन फ़िल्टर –

+0

@StephenMuecke धन्यवाद का उपयोग करके एक बनाने के उदाहरण के लिए धन्यवाद। क्या आप इसका जवाब दे सकते हैं? – Alex

+1

देर से - कल तक इंतजार करना होगा :) –

उत्तर

8

यह एक स्लग मार्ग कहा जाता है:

routes.MapRoute(
    "Question", 
    "questions/{id}/{title}", 
    new { controller = "Question", action = "Details" }); 

चाल अंत में "स्लग" जोड़ने जब आप लिंक बना है: आप आसानी से की तरह कुछ के साथ ऐसा कर सकते हैं। एक तरह से इस लक्ष्य को हासिल करने के लिए एक वैकल्पिक slug पैरामीटर के साथ एक मार्ग को परिभाषित करने के लिए है, और नियंत्रक विधि जाँच में पैरामीटर QuestionController में

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

तो प्रदान की गई है, तो (मान लिया गया एक आईडी हमेशा उपलब्ध कराया जाएगा)

public ActionResult Details (int id, string slug) 
{ 
    if (string.IsNullOrEmpty(slug)) 
    { 
     // Look up the slug in the database based on the id, but for testing 
     slug = "this-is-a-slug"; 
     return RedirectToAction("Details", new { id = id, slug = slug }); 
    } 
    var model = db.Questions.Find(id); 
    return View(model); 
} 
+0

पूछ रहा था, मैं इसे इस यूआरएल पास कर रहा हूं: http: // localhost: 58 9 88/प्रश्न/1/aa-aa और यह मुझे संसाधन नहीं मिला है पृष्ठ नहीं मिला। क्या आप जानते हैं कि वह क्यों है? – Alex

+0

न तो मैप रूट फ़ंक्शन हिट हो रहा है जब मैं ब्रेक पॉइंट – Alex

+0

सेट करके अनुरोध प्रारंभ करता हूं और जब मैं http: // localhost: 58988/question/0/fawad पर जाता हूं। यह कहता है "दृश्य 'फवाद' या उसके मालिक को नहीं मिला या कोई दृश्य इंजन खोजे गए स्थानों का समर्थन नहीं करता है। निम्नलिखित स्थानों की खोज की गई:" – Alex

3

आप एक कस्टम मार्ग की तलाश में हैं। यदि आप बारीकी से देखते हैं, तो यूआरएल के पाठ भाग की परवाह नहीं है। तो:

http://stackoverflow.com/questions/xxxxxxxx/rails-sql-search-through-has-one-relationship 
AND 
http://stackoverflow.com/questions/xxxxxxxx/ 

दोनों काम करेंगे।

@Html.RouteLink(
    "Read more.", 
    "Question", 
    new { id = question.Id, title = Slugger.ToUrl(question.Title) }) 
+0

को न भूलें यदि मेरे एप्लिकेशन में दो प्रकार के पेज "प्रश्न" और "पंजीकरण" हैं। मैं अपने आवेदन में दो अलग-अलग मार्ग कैसे पंजीकृत कर सकता हूं? – Alex

+0

मुझे यकीन नहीं है कि मैं अनुसरण करता हूं, आप एक से अधिक मार्ग पंजीकृत कर सकते हैं जब तक कि नाम अद्वितीय हों – beautifulcoder

+0

ठीक जानकारी के लिए धन्यवाद। वास्तव में मैं – Alex

संबंधित मुद्दे