我的ASP.NET MVC应用程序中需要一个图像生成器,但我不知道是否可以在ASP.NET MVC中使用ASHX.
如果有一个类似于继承IViewDataContainer的IHttpHandler类,那么我可以在我的ASHX上使用ViewData.Model.
我阅读了一篇关于它的博客文章,但它似乎已经过时了我在ASP.NET论坛中获得的信息
有任何想法吗?
您还可以使用此ImageResult类返回图像.
不需要处理程序只需创建一个路由,例如:
/ ImageGenerator/{动作}/{图像标识} /
并为请求返回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(imageId); return new ImageResult(imageInfo.FullFilename); }
还添加了FileType帮助程序类:
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); } } }
你应该能够从动作中返回图像吗?请看这里了解更多.
是的,您可以将ashx与MVC一起使用(通过告诉它忽略该路由) - 但我不确定这是最好的方法,除非它是重用现有代码.
对不起,伙伴们,该链接已被删除.它发生了.