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