2009-03-11 15 views
21

मुझे अपने एएसपी.नेट एमवीसी अनुप्रयोग में एक छवि जनरेटर की आवश्यकता है, लेकिन मुझे नहीं पता कि एएसपी.नेट एमवीसी में एएसएचएक्स का उपयोग करना संभव है या नहीं।एएसपी.नेट एमवीसी में जेनेरिक हैंडलर (एएसएचएक्स) का उपयोग कैसे करें?

यदि IHttpHandler के समान वर्ग है जो IViewDataContainer को विरासत में लेता है, तो मैं अपने ASHX पर ViewData.Model का उपयोग कर सकता हूं।

मैंने पढ़ा एक blog post about it लेकिन यह जानकारी मैं ASP.NET forum

कोई भी विचार में मिला से पुराना लगते?

उत्तर

14

आपको केवल कार्रवाई से छवि वापस करने में सक्षम होना चाहिए? अधिक के लिए यहां देखें।

और हां, आप एमवीसी के साथ एएसएक्स का उपयोग कर सकते हैं (इसे मार्ग को अनदेखा करने के लिए कहकर) - लेकिन मुझे यकीन नहीं है कि यह तब तक का सबसे अच्छा तरीका है जब तक कि मौजूदा कोड का पुन: उपयोग न किया जाए।


क्षमा करें दोस्तों, लिंक हटा दिया गया है। हो जाता है।

+0

(टिप्पणियों के हटाया बहुत सारे है कि विषय बंद थे) –

+5

[लेख संग्रह के माध्यम से सुलभ है। यहां क्लिक करें] (http://web.archive.org/web/20090106030652/http://blog.rodj.org/archive/2008/09/24/asp.net-mvc-image-handler.aspx) –

31

आप छवि को वापस करने के लिए इस छविResult क्लास का भी उपयोग कर सकते हैं।

एक हैंडलर के लिए कोई ज़रूरत नहीं है बस के रूप में एक मार्ग बनाने:

/ImageGenerator/{कार्रवाई}/{imageid}/

और अनुरोध के लिए एक ImageResult लौट आते हैं।

public class ImageResult : ActionResult 
    { 
     public string SourceFilename { get; set; } 
     public MemoryStream SourceStream { get; set; } 
     public string ContentType { get; set; } 
     public ImageResult(string sourceFilename) 
     { 
      SourceFilename = sourceFilename; 
      ContentType = FileTypeHelper.GetContentType(SourceFilename); 
     } 
     public ImageResult(MemoryStream sourceStream, string contentType) 
     { 
      SourceStream = sourceStream; 
      ContentType = contentType; 
     } 
     public override void ExecuteResult(ControllerContext context) 
     { 
      var res = context.HttpContext.Response; 
      res.Clear(); 
      res.Cache.SetCacheability(HttpCacheability.NoCache); 
      res.ContentType = ContentType; 

      if (SourceStream != null) 
      { 
       SourceStream.WriteTo(res.OutputStream); 

      } 
      else 
      { 
       res.TransmitFile(SourceFilename); 
      } 

     } 


    } 

इस एक नियंत्रक में निम्न कार्य का उपयोग करें और इसके लिए एक मार्ग को जोड़ने के लिए:

public ImageResult GetImage(int imageId) 
{ 
    // Database fetch of image details 
    var imageInfo = repository.Get<ImageInfo>(imageId); 
    return new ImageResult(imageInfo.FullFilename); 
} 

भी फ़ाइल-प्रकार सहायक वर्ग जोड़ लिया है:

public static class FileTypeHelper 
{ 
    public static string GetContentType(string SourceFileName) 
    { 
     var extension = Path.GetExtension(SourceFileName).ToLower(); 
     switch (extension) 
     { 
      case ".ai": return "application/postscript"; 
      case ".aif": return "audio/x-aiff"; 
      case ".aifc": return "audio/x-aiff"; 
      case ".aiff": return "audio/x-aiff"; 
      case ".asc": return "text/plain"; 
      case ".au": return "audio/basic"; 
      case ".avi": return "video/x-msvideo"; 
      case ".bcpio": return "application/x-bcpio"; 
      case ".bin": return "application/octet-stream"; 
      case ".c": return "text/plain"; 
      case ".cc": return "text/plain"; 
      case ".ccad": return "application/clariscad"; 
      case ".cdf": return "application/x-netcdf"; 
      case ".class": return "application/octet-stream"; 
      case ".cpio": return "application/x-cpio"; 
      case ".cpp": return "text/plain"; 
      case ".cpt": return "application/mac-compactpro"; 
      case ".cs": return "text/plain"; 
      case ".csh": return "application/x-csh"; 
      case ".css": return "text/css"; 
      case ".dcr": return "application/x-director"; 
      case ".dir": return "application/x-director"; 
      case ".dms": return "application/octet-stream"; 
      case ".doc": return "application/msword"; 
      case ".drw": return "application/drafting"; 
      case ".dvi": return "application/x-dvi"; 
      case ".dwg": return "application/acad"; 
      case ".dxf": return "application/dxf"; 
      case ".dxr": return "application/x-director"; 
      case ".eps": return "application/postscript"; 
      case ".etx": return "text/x-setext"; 
      case ".exe": return "application/octet-stream"; 
      case ".ez": return "application/andrew-inset"; 
      case ".f": return "text/plain"; 
      case ".f90": return "text/plain"; 
      case ".fli": return "video/x-fli"; 
      case ".flv": return "video/x-flv"; 
      case ".gif": return "image/gif"; 
      case ".gtar": return "application/x-gtar"; 
      case ".gz": return "application/x-gzip"; 
      case ".h": return "text/plain"; 
      case ".hdf": return "application/x-hdf"; 
      case ".hh": return "text/plain"; 
      case ".hqx": return "application/mac-binhex40"; 
      case ".htm": return "text/html"; 
      case ".html": return "text/html"; 
      case ".ice": return "x-conference/x-cooltalk"; 
      case ".ief": return "image/ief"; 
      case ".iges": return "model/iges"; 
      case ".igs": return "model/iges"; 
      case ".ips": return "application/x-ipscript"; 
      case ".ipx": return "application/x-ipix"; 
      case ".jpe": return "image/jpeg"; 
      case ".jpeg": return "image/jpeg"; 
      case ".jpg": return "image/jpeg"; 
      case ".js": return "application/x-javascript"; 
      case ".kar": return "audio/midi"; 
      case ".latex": return "application/x-latex"; 
      case ".lha": return "application/octet-stream"; 
      case ".lsp": return "application/x-lisp"; 
      case ".lzh": return "application/octet-stream"; 
      case ".m": return "text/plain"; 
      case ".man": return "application/x-troff-man"; 
      case ".me": return "application/x-troff-me"; 
      case ".mesh": return "model/mesh"; 
      case ".mid": return "audio/midi"; 
      case ".midi": return "audio/midi"; 
      case ".mime": return "www/mime"; 
      case ".mov": return "video/quicktime"; 
      case ".movie": return "video/x-sgi-movie"; 
      case ".mp2": return "audio/mpeg"; 
      case ".mp3": return "audio/mpeg"; 
      case ".mpe": return "video/mpeg"; 
      case ".mpeg": return "video/mpeg"; 
      case ".mpg": return "video/mpeg"; 
      case ".mpga": return "audio/mpeg"; 
      case ".ms": return "application/x-troff-ms"; 
      case ".msh": return "model/mesh"; 
      case ".nc": return "application/x-netcdf"; 
      case ".oda": return "application/oda"; 
      case ".pbm": return "image/x-portable-bitmap"; 
      case ".pdb": return "chemical/x-pdb"; 
      case ".pdf": return "application/pdf"; 
      case ".pgm": return "image/x-portable-graymap"; 
      case ".pgn": return "application/x-chess-pgn"; 
      case ".png": return "image/png"; 
      case ".pnm": return "image/x-portable-anymap"; 
      case ".pot": return "application/mspowerpoint"; 
      case ".ppm": return "image/x-portable-pixmap"; 
      case ".pps": return "application/mspowerpoint"; 
      case ".ppt": return "application/mspowerpoint"; 
      case ".ppz": return "application/mspowerpoint"; 
      case ".pre": return "application/x-freelance"; 
      case ".prt": return "application/pro_eng"; 
      case ".ps": return "application/postscript"; 
      case ".qt": return "video/quicktime"; 
      case ".ra": return "audio/x-realaudio"; 
      case ".ram": return "audio/x-pn-realaudio"; 
      case ".ras": return "image/cmu-raster"; 
      case ".rgb": return "image/x-rgb"; 
      case ".rm": return "audio/x-pn-realaudio"; 
      case ".roff": return "application/x-troff"; 
      case ".rpm": return "audio/x-pn-realaudio-plugin"; 
      case ".rtf": return "text/rtf"; 
      case ".rtx": return "text/richtext"; 
      case ".scm": return "application/x-lotusscreencam"; 
      case ".set": return "application/set"; 
      case ".sgm": return "text/sgml"; 
      case ".sgml": return "text/sgml"; 
      case ".sh": return "application/x-sh"; 
      case ".shar": return "application/x-shar"; 
      case ".silo": return "model/mesh"; 
      case ".sit": return "application/x-stuffit"; 
      case ".skd": return "application/x-koan"; 
      case ".skm": return "application/x-koan"; 
      case ".skp": return "application/x-koan"; 
      case ".skt": return "application/x-koan"; 
      case ".smi": return "application/smil"; 
      case ".smil": return "application/smil"; 
      case ".snd": return "audio/basic"; 
      case ".sol": return "application/solids"; 
      case ".spl": return "application/x-futuresplash"; 
      case ".src": return "application/x-wais-source"; 
      case ".step": return "application/STEP"; 
      case ".stl": return "application/SLA"; 
      case ".stp": return "application/STEP"; 
      case ".sv4cpio": return "application/x-sv4cpio"; 
      case ".sv4crc": return "application/x-sv4crc"; 
      case ".swf": return "application/x-shockwave-flash"; 
      case ".t": return "application/x-troff"; 
      case ".tar": return "application/x-tar"; 
      case ".tcl": return "application/x-tcl"; 
      case ".tex": return "application/x-tex"; 
      case ".tif": return "image/tiff"; 
      case ".tiff": return "image/tiff"; 
      case ".tr": return "application/x-troff"; 
      case ".tsi": return "audio/TSP-audio"; 
      case ".tsp": return "application/dsptype"; 
      case ".tsv": return "text/tab-separated-values"; 
      case ".txt": return "text/plain"; 
      case ".unv": return "application/i-deas"; 
      case ".ustar": return "application/x-ustar"; 
      case ".vcd": return "application/x-cdlink"; 
      case ".vda": return "application/vda"; 
      case ".vrml": return "model/vrml"; 
      case ".wav": return "audio/x-wav"; 
      case ".wrl": return "model/vrml"; 
      case ".xbm": return "image/x-xbitmap"; 
      case ".xlc": return "application/vnd.ms-excel"; 
      case ".xll": return "application/vnd.ms-excel"; 
      case ".xlm": return "application/vnd.ms-excel"; 
      case ".xls": return "application/vnd.ms-excel"; 
      case ".xlw": return "application/vnd.ms-excel"; 
      case ".xml": return "text/xml"; 
      case ".xpm": return "image/x-xpixmap"; 
      case ".xwd": return "image/x-xwindowdump"; 
      case ".xyz": return "chemical/x-pdb"; 
      case ".zip": return "application/zip"; 
      default: return string.Format("application/{0}", extension); 
     } 
    } 
} 
+0

जेनेरिक एमवीसी दृष्टिकोण का उपयोग करने से हैंडलर 7.23 गुना तेज है। – Adeel

+0

@Adeel, क्या आपके पास जेनेरिक हैंडलर के लिए कोई नमूना है? पक्का नहीं आपका क्या मतलब है। – Picflight

+0

@ रिचर्ड, आप इस छवि का उपयोग कैसे करते हैं? – Picflight

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