- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Web 应用程序项目来支持到供应商产品后端的文件传输操作。它由 2 个 HTTPHandler 文件组成,这些文件在装有 IIS 6.0 的 Win2003 服务器上编译成一个网站:
这些文件从公开用户界面的 ColdFusion 网站“发布到”。在某种程度上,我的工作已经完成,因为这些处理程序可以工作并且必须从 ColdFusion 调用。
但是,我对自己无法独立于 ColdFusion 进行测试/改进而无法使用自己的“测试 UI”(default.aspx) 感到非常沮丧。
<asp:Button ID="DownloadButton" PostBackUrl="~/DownloadHandler.ashx" runat="server" Text="Download"/>
使用 PostBackUrl 进行下载效果很好 - 当输入 DownloadHandler.ashx 时,它会在 context.Request.Form["txtRecordNumber"];
中找到其关键输入值但我不能将此技术用于上传,因为我必须进行一些处理(以某种方式将所选文件 upload1.postedfile 中的字节读取到 FORM 变量中,以便我的 UploadHandler.ashx 文件可以从Request.Form 与下载一样)。
My first approach tried using HTTPWebRequest这似乎过于复杂,我永远无法开始工作。症状以 HTTP 401 状态代码开始,然后演变为 302 状态代码,因此我研究了其他想法。
这是我的 default.aspx 中的最新代码片段:
protected void UploadHandlerButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
try
{
BuildFormData();
//Server.Transfer("UploadHandler.ashx", true);
Response.Redirect("~/UploadHandler.ashx");
}
catch (Exception someError)
{
LogText("FAILURE: " + someError.Message);
}
}
}
protected void BuildFormData()
{
BinaryReader b = new BinaryReader(FileUpload1.PostedFile.InputStream);
int numBytes = FileUpload1.PostedFile.ContentLength;
byte[] fileContent = b.ReadBytes(numBytes);
objBinaryData.Text = System.Text.Encoding.UTF8.GetString(fileContent);
b64fileName.Text = FileUpload1.PostedFile.FileName;
// create arbitrary MetaData in a string
strMetaData.Text = "recAuthorLoc=anyname1~udf:OPEAnalyst=anyname2~udf:Grant Number=0102030405";
}
尝试对我的 .ashx 文件使用 Server.Transfer(上文)会导致错误: 执行 UploadHandler.ashx 的子请求时出错
尝试对我的 .ashx 文件使用 Response.Redirect(上图)导致 GET(不是 POST)并且 Trace.axd 当然在 Form 集合中没有显示任何内容,所以这似乎也是错误的。
我什至尝试克隆我的 .ashx 文件并创建 UploadPage.aspx(一个没有 HTML 元素的网络表单),然后尝试:
Server.Transfer("UploadPage.aspx", true);
//Response.Redirect("~/UploadPage.aspx");
这些都不允许我在处理上传请求的代码中看到我需要在 Request.Form 中看到的表单数据。我显然在这里遗漏了一些东西......在此先感谢您的帮助。
编辑更新:我想我可以澄清我的问题。当 UploadHandler.ashx 从 ColdFusion 发布时,它需要的所有输入都在 FORM 集合中可用(例如 Request.Form["fileData"] 等)
但是当我使用这个 控件时,它会生成一个回发到我的启动网页(即 default.aspx)。这使我能够通过 FileUpload1.PostedFile 引用内容,如:
protected void BuildFormData()
{
BinaryReader b = new BinaryReader(FileUpload1.PostedFile.InputStream);
int numBytes = FileUpload1.PostedFile.ContentLength;
byte[] fileContent = b.ReadBytes(numBytes);
objBinaryData.Text = System.Text.Encoding.UTF8.GetString(fileContent);
b64fileName.Text = FileUpload1.PostedFile.FileName;
}
但我没有使用 FileUpload1.PostedFile.SaveAs 方法将文件保存在我的网络服务器上的某个位置。我需要以某种方式 - 请原谅这里的语言 - “重新发布” 此数据到一个完全不同的文件 - 即我的 UploadHandler.ashx 处理程序。我在上面尝试过的所有愚蠢的技术都无法完成我需要的。
EDIT-UPDATE(2009 年 8 月 20 日)- 我使用 Javascript 的最终解决方案:
protected void UploadHandlerButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
try
{
ctlForm.Text = BuildFormData();
String strJS = InjectJS("_xclick");
ctlPostScript.Text = strJS;
}
catch (Exception someError)
{
LogText("FAILURE: " + someError.Message);
}
}
}
private String InjectJS(String strFormId)
{
StringBuilder strScript = new StringBuilder();
strScript.Append("<script language='javascript'>");
strScript.Append("var ctlForm1 = document.forms.namedItem('{0}');");
strScript.Append("ctlForm1.submit();");
strScript.Append("</script>");
return String.Format(strScript.ToString(), strFormId);
}
protected string BuildFormData()
{
BinaryReader b = new BinaryReader(FileUpload1.PostedFile.InputStream);
int numBytes = FileUpload1.PostedFile.ContentLength;
byte[] fileContent = b.ReadBytes(numBytes);
// Convert the binary input into Base64 UUEncoded output.
string base64String;
base64String =
System.Convert.ToBase64String(fileContent,
0,
fileContent.Length);
objBinaryData.Text = base64String;
b64fileName.Text = FileUpload1.PostedFile.FileName;
// create arbitrary MetaData in a string
strMetaData.Text = "recAuthorLoc=Patterson, Fred~udf:OPEAnalyst=Tiger Woods~udf:Grant Number=0102030405";
StringBuilder strForm = new StringBuilder();
strForm.Append("<form id=\"_xclick\" name=\"_xclick\" target=\"_self\" action=\"http://localhost/HTTPHandleTRIM/UploadHandler.ashx\" method=\"post\">");
strForm.Append("<input type=\"hidden\" name=\"strTrimURL\" value=\"{0}\" />");
strForm.Append("<input type=\"hidden\" name=\"objBinaryData\" value=\"{1}\" />");
strForm.Append("<input type=\"hidden\" name=\"b64fileName\" value=\"{2}\" />");
strForm.Append("<input type=\"hidden\" name=\"strDocument\" value=\"{3}\" />");
strForm.Append("<input type=\"hidden\" name=\"strMetaData\" value=\"{4}\" />");
strForm.Append("</form>");
return String.Format(strForm.ToString()
, txtTrimURL.Text
, objBinaryData.Text
, b64fileName.Text
, txtTrimRecordType.Text
, strMetaData.Text);
}
最佳答案
抱歉,如果我遗漏了什么,但你不能简单地使用纯 HTML 表单将文件上传到你的处理程序:
<form action="UploadHandler.ashx" method="post" enctype="multipart/form-data">
Choose file to upload:
<input name="file" type="file" size="50">
</form>
关于c# - 如何将数据从网络表单页面发布到 HTTPHandler.ashx 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296781/
我有一个在客户端页面上运行的 HttpHandler(跨域,而不是在我们的 IIS 服务器上等),当他们单击我们的嵌入式链接时,它会触发我们服务器上的处理程序。到目前为止一切正常。 我现在尝试使用 S
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章HttpHandler HttpModule入门篇由作者收集整理,如果你
我想编写一个 HttpHandler 将流量重定向到服务器上的各个网页。用户将输入 http://www.thisissupposetoberedirected.com/site12 并应重定向到适当
我构建了一个自定义的 HttpHandler,它会在负载均衡器请求特定资源时发出状态页面。 更多背景知识:它不能是 Controller ,因为我需要能够与其他程序集共享它,并且公司编码策略不允许来自
我正在为 URL 重写编写一个简单的 HttpHandler,但我碰壁了。 我创建了一个非常简单的 HttpHandler 类来测试: public class HttpHandler : IHttp
我有一个 HTTP 处理程序,它是我们应用程序 90% 的入口点。基本上它会收到一个请求,处理大量数据并返回一个非常具体的文件,具体取决于它嵌入的客户端和网页等。我已经设置了应用程序映射,以便所有 .
我有一个如下所示的 HttpHandler。 @Override public void handleRequest(HttpServerExchange exchange) throws E
我想在我的 MVC 应用程序中创建一个仅针对页面请求(而不是 css、脚本、图像等)调用的 HttpHandler。 如何只在 web.config 文件中定位没有扩展名的请求? 谢谢 最佳答案 如果
只有当用户登录到不同的页面时,我才尝试重定向用户。我正在使用 HTTPHandler 拦截此请求并重定向。用户登录后,控件不会返回此 HTTPHandler。任何想法或建议 namespace NES
我正在编写一个小的 Java 应用程序,它实现了一个从客户端接收 http post 命令的 http 服务。 我用来实现所有这些的类是 com.sun.net 中的 HttpHandler 和 Ht
我正在尝试将文件分块发送到 HttpHandler,但是当我在 HttpContext 中收到请求时,inputStream 为空。 所以 a:发送时我不确定我的 HttpWebRequest 是否有
我正在尝试创建一个 HTTP 处理程序来处理对一个文件夹的所有请求,但我只希望它在请求的文件不存在时触发(例如:请求来自文件 X,如果 X 存在我会喜欢提供文件,否则处理程序应该处理它)。 文件将只是
使用 HTTPHandler 与 .aspx 相比有哪些优势?它是否具有相同的功能,是否重量更轻、速度更快? 有哪些缺点? 最佳答案 Aspx 使用具有复杂页面生命周期和大量附加处理的全功能 Web
我已经定义了一个自定义的 HttpHandler, public class RequestHandler : IHttpHandler 我通过我所有的请求,
在 IIS6 中是否有使用 ISAPI 过滤器/扩展的理由?使用 httphandler/http 模块无法实现相同的功能。同样在 IIS7 中是否完全删除了 ISAPI?是用.Net编写的IIS7的
我需要编写一个 HttpHandler 来提供 JavaScript 文件,这些文件是我项目中 .DLL 中的嵌入资源。 View 中的引用不能直接看到这样的资源,因此我计划使用 HttpHandle
我对 system.web 中的 httpHandlers 感到困惑和 system.webServer 中的处理程序.这两种配置有什么区别?以及如何以及何时使用它们? 实际上另一个问题也是针对模块的
我创建了一个 HttpHandler,以下是 Web.config 中的设置 IsReusable = true in HttHandler 假设我的应用程序中有 20 个用户,他们正在尝试输入以下
在带有 IIS7 的 ASP.NET 4.0 中,我创建了一个 HttpHandler 并在 web.config 中注册了它 在这里,我试图实现的是处理对 http://my-server/MyP
在带有 IIS7 的 ASP.NET 4.0 中,我创建了一个 HttpHandler 并在 web.config 中注册了它 在这里,我试图实现的是处理对 http://my-server/MyP
我是一名优秀的程序员,十分优秀!