मैं थोड़ा अलग फैशन में यद्यपि @ thinkzig के समाधान का उपयोग कर समाप्त हुआ। एमवीसी फ्यूचर्स असेंबली से फ़ाइलकंटेंट का उपयोग करके, मैंने छवियों को संभालने के लिए बस एक और मार्ग जोड़ा।
public ActionResult Image(string id, string image)
{
string articlePath = Server.MapPath("~/views/article/");
string filePath = Path.Combine(articlePath, string.Format("{0}/{1}", id, image));
return this.File(filePath, "image");
}
एक अन्य छोटी बात मैं का सामना करना पड़ा था:
routes.MapRoute("Image", "article/{id}/{image}", new { controller = "Article", action = "Image" });
routes.MapRoute("Article", "article/{id}", new { controller = "Article", action = "Index" });
इस नए कार्रवाई विधि बस filepath articleID और छवि नाम के आधार पर निर्माण करती है। यदि उपयोगकर्ता लेख बिना किसी पीछे की स्लैश (http://localhost/article/8AB98
) तक पहुंचता है, तो ब्राउज़र सोचता है कि आलेख आईडी फ़ाइल है, और छवि गलत फ़ोल्डर (http://localhost/article/img.png
) ढूंढने का प्रयास करता है।
इस मामले में, एमवीसी छवि नाम के साथ अनुच्छेद कार्रवाई के अनुरोध को "आईडी" पैरामीटर के रूप में अनुरोध करता है, इसलिए मैं बस "।" आईडी में और फिर इसे संसाधित करने के लिए नियमित छवि कार्रवाई का उपयोग करें।
अनुच्छेद कार्रवाई में :
if (id.Contains("."))
{
return RedirectToImage(id);
}
और फिर redirecttoimage कोड जो आईडी और फ़ाइल नाम
private ActionResult RedirectToImage(string id)
{
if (Request.UrlReferrer == null)
{
return Content("invalid request");
}
var referrer = Request.UrlReferrer.ToString();
if (referrer.Contains("?"))
{
referrer = referrer.Split('?')[0];
}
var realId = Path.GetFileName(referrer);
return this.Image(realId, id);
}
आप ध्यान दें हूँ कि मैं करने के लिए यूआरएल रेफरर पर भरोसा करते हैं पता लगा लेता है वास्तविक आलेख आईडी प्राप्त करें। यदि उपयोगकर्ता छवि पर राइट क्लिक करने का प्रयास करता है (जब पीछे की ओर स्लैश के बिना देखा जाता है) और "नए टैब में खुली छवि" चुनता है, तो मेरे पास यह जानने का कोई तरीका नहीं है कि आलेख आईडी क्या है, इसलिए मैं बस एक "अमान्य अनुरोध" उपयोगकर्ता को स्ट्रिंग। यह ठीक है क्योंकि मैं वास्तव में उन परिस्थितियों में उन उपयोगकर्ताओं का समर्थन करने की कोशिश नहीं कर रहा हूं :-)
मैंने आपके दो विकल्पों का बिल्कुल उपयोग नहीं किया था, लेकिन आखिरकार यह समाधान हल हुआ जिसने इसे हल किया :-) मैं ' विवरण के साथ प्रश्न का एक और जवाब पोस्ट करेंगे –