我已经创建了一个ashx文件来动态生成图像缩略图.我想在第一次调用它们后将这些图像缓存在客户端.
网址:
〜/ image.ashx?DIR =用户W = 25 H = 25&力= YES&IMG = matt.jpg
代码背后:
public void ProcessRequest (HttpContext context) {
TimeSpan refresh = new TimeSpan(0, 15, 0);
context.Response.Cache.SetExpires(DateTime.Now.Add(refresh));
context.Response.Cache.SetMaxAge(refresh);
context.Response.Cache.SetCacheability(HttpCacheability.Server);
context.Response.CacheControl = HttpCacheability.Public.ToString();
context.Response.Cache.SetValidUntilExpires(true);
string dir = context.Request.QueryString["dir"];
string img = context.Request.QueryString["img"];
bool force = context.Request.QueryString["force"] == "yes";
double w = 0;
double h = 0;
...
context.Response.ContentType = "image/jpeg";
thumb.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
Run Code Online (Sandbox Code Playgroud)
使用Chrome中的开发工具我可以看到以下响应标头:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 26 Sep 2011 19:17:31 GMT
X-AspNet-Version: 4.0.30319 …Run Code Online (Sandbox Code Playgroud) 我看到一个非常奇怪的问题,只有非管理用户才会发生.
当用户登录并访问一个页面时,它们将从系统中注销.页面完成加载,就像他们已登录一样,但一旦他们尝试任何其他操作(包括刷新浏览器页面),他们就会被认为未登录并显示登录提示.
打开fiddler,我可以看到服务器的响应之一包含以下内容:
响应发送了71个字节的Cookie数据:Set-Cookie:portalaliasid =; expires = Sat,08-May-1982 17:26:06 GMT; 路径= /; 仅Http
响应发送69个字节的Cookie数据:Set-Cookie:portalroles =; expires = Sat,08-May-1982 17:26:06 GMT; 路径= /; 仅Http
响应发送69个字节的Cookie数据:Set-Cookie:.DOTNETNUKE =; expires = Tue,12-Oct-1999 04:00:00 GMT; 路径= /; 仅Http
响应发送了27个字节的Cookie数据:Set-Cookie:language =; 路径= /; 仅Http
响应发送33个字节的Cookie数据:Set-Cookie:authentication =; 路径= /; 仅Http
当我访问我的自定义ashx Web调用时,似乎总会发生这种情况.进行此调用的代码是以下javascript:
$('#lstStates').empty();
var selectedRegions = $('select[id*=lbxRegions]').val();
// Get the list of states for the selected regions
$.ajax({
url: '/DesktopModules/MyModule/ashx/GetStatesForRegions.ashx',
data: { regions: selectedRegions },
dataType: 'json',
success: function (data) {
if (IsArray(data)) {
for (var state …Run Code Online (Sandbox Code Playgroud) 我从我正在测试制作条形码的供应商那里获得了一个安装在IIS上的示例应用程序.
aspx页面工作正常,但是当aspx页面调用ashx页面时,我得到以下错误:
'/ BarcodeSample'应用程序中的服务器错误.
分析程序错误说明:解析为此请求提供服务所需的资源时发生错误.请查看以下特定的解析错误详细信息并相应地修改源文件.
分析器错误消息:无法创建类型"TECIT.OnlineBarcodes.BarcodeHandler".
来源错误:
第1行:<%@ WebHandler语言="C#"CodeBehind ="BarcodeHandler.ashx.cs"Class ="TECIT.OnlineBarcodes.BarcodeHandler"%>
源文件:/BarcodeSample/BarcodeHandler.ashx行:1
-------------------------------------------------- ------------------------------版本信息:Microsoft .NET Framework版本:2.0.50727.3634; ASP.NET版本:2.0.50727.3634
为什么会这样?如何让这个ashx文件起作用?
我们有一个应用程序,它将webforms用于一些较旧的Web应用程序页面,但也包含一些较新功能的MVC功能.我们对下载必须在服务器上处理的文件有一些新的要求(而不是直接链接到Web服务器上的静态文件).
我没有看到任何迹象表明是否有理由应该使用ASHX处理程序而不仅仅使用MVC控制器并对响应对象进行操作并在action方法结束时返回EmptyResult().
MVC是否有最佳实践?ASHX处理程序是否应该用于WebForms,或者它们是否提供了使用MVC进行此类文件下载功能的一些好处?
我想调用ASHX文件并从JavaScript传递一些查询字符串变量,并将返回字符串转换为JavaScript中的字符串.我该怎么做?
ASHX文件已经编码为response.write一个基于查询字符串的字符串.
我有一个应用程序,它使用默认的ASP.NET HTTP处理程序扩展名.ashx.这在IIS 7.5中不再有效.我收到404.3消息,其中包含添加处理程序的说明.
我专门使用默认的处理程序扩展来保持简单,而不必在我的Web应用程序的安装程序中添加映射.
新版本的IIS似乎有很多来自IIS 6的变化....我错过了什么?
我正在编写一些连接到模拟服务的ashx处理程序,我希望它们共享模拟服务实例.我最简单的方法是创建一个静态实例
public class AbstractHandler
{
static IService _impl;
public static IService Impl
{
get
{
if (_impl == null)
{
_impl = new MockService();
}
return _impl;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道这是否会起作用; 从这个类继承的不同处理程序将拥有自己的静态_impl引用或者它们将被共享吗?
我有一个下载处理程序,将在IE中下载该文件但在chrome中它会尝试下载自己.我的意思是Chrome意味着Chrome会尝试下载名为downloadhandler.ashx的文件.处理程序的代码是
<%@ WebHandler Language="C#" Class="DownloadHandler" %>
using System;
using System.Web;
public class DownloadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string file = "";
// get the file name from the querystring
if (context.Request.QueryString["Filepath"] != null)
{
file = context.Request.QueryString["Filepath"].ToString();
}
string filename = context.Server.MapPath("~/Minutes/" + file);
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filename);
try
{
if (fileInfo.Exists)
{
context.Response.Clear();
context.Response.AddHeader("Content-Disposition", "inline;attachment; filename=\"" + fileInfo.Name + "\"");
context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
context.Response.ContentType = "application/octet-stream";
context.Response.TransmitFile(fileInfo.FullName);
context.Response.Flush();
}
else
{
throw new Exception("File not …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 ashx 处理程序作为 HTML5 视频源。我可以做到这一点,但我无法在已经缓冲的视频上进一步前进。
我可以在使用标准 MP4 源的网络选项卡上看到,向前查找会创建另一个请求,但使用处理程序则不会。
有些视频超过 1 GB。
到目前为止,这是我必须让视频正常工作的内容:
public void ProcessRequest(HttpContext context)
{
context.Response.Buffer = false;
context.Response.ContentType = "video/mp4";
FileInfo file = new FileInfo(path);
int len = (int)file.Length, bytes;
context.Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];
Stream outStream = context.Response.OutputStream;
using (Stream stream = File.OpenRead(path))
{
while (len > 0 && (bytes = stream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, bytes);
len -= bytes;
}
}
}
Run Code Online (Sandbox Code Playgroud)
摘自 Marck Gravells 的帖子Best way to stream …
我在 ASP.NET Web 项目中有一个 ashx 文件。它有一个 cs 文件背后的代码。cs 文件被编译成项目 dll 并部署到生产环境。我发现没有办法在不部署整个项目 dll 的情况下动态更改 cs 文件。
我一直将 C# 代码放入 aspx(而不是 .cs)文件中,部署后,我可以对单个 aspx 文件进行更改,然后部署,IIS 可以动态编译并与其后面的 C# 代码合并。
我可以对 ashx 文件做类似的事情吗?
这是来自 MSDN 的引用。http://msdn.microsoft.com/en-us/library/ms366723(v=vs.100).aspx
ASP.NET 支持动态编译 ASP.NET 页面(.aspx 文件)、ASP.NET Web 服务(.asmx 文件)、ASP.NET HTTP 处理程序(.ashx 文件)
谢谢,这可以节省我很多时间!
ashx ×10
asp.net ×5
c# ×4
asp.net-4.0 ×1
asp.net-mvc ×1
caching ×1
compilation ×1
cookies ×1
dotnetnuke ×1
dynamic ×1
html ×1
html5-video ×1
iis ×1
iis-6 ×1
iis-7.5 ×1
javascript ×1
return ×1
string ×1
video ×1