让我们来看一个通常的aspx页面,〜/ admin / template.aspx
admin文件夹仅允许“管理员”角色。
现在我不想像往常一样运行template.aspx,但我想从活动进程中调用它。 假设我在〜/ admin / buildMyStuff.aspx上,我收集了一些数据,我现在有一些查询字符串,比如“?do = this $ andDo = that $ index = {0}”。现在我希望,使用这个模板,循环我的数据并生成我的输出,然后将其放在例如静态html或文本文件或其他内容中。
我该怎么做? 将其称为新请求,等待响应?我必须做什么,它是在“管理员”角色下运行,还是自动执行,因为我已经是管理员?
还是有另一种可能性,允许我运行模板页面并指定我的自定义htmltextwriter作为输出?
修改
public static string RenderPageAndGetHtml(string pageUrl, string pageQuery)
{
var sw = new StringWriter();
var wr = new SimpleWorkerRequest(pageUrl, pageQuery, sw);
HttpRuntime.ProcessRequest(wr);
sw.Close();
return sw.ToString();
}
这是解决方案。
BUT:
似乎SimpleWorkerRequest出现了错误
发生以下情况:
〜/ default.aspx失败
/default.aspx失败
default.aspx确定
en / default.aspx失败
/en/default.aspx失败
〜/ en / default.aspx失败
编辑:
好的,我实现了我的自定义HttpWorkerRequest。现在它有效......
由于
答案 0 :(得分:1)
您需要template.aspx页面的HTML代码吗?尝试这个功能,也许这就是你需要的:
public static string RenderPageAndGetHtml(string pageUrl, string pageQuery)
{
var sw = new StringWriter();
var wr = new SimpleWorkerRequest(pageUrl, pageQuery, sw);
HttpRuntime.ProcessRequest(wr);
sw.Close();
return sw.ToString();
}
答案 1 :(得分:1)
需要注意的是,SimpleWorkerRequest
不会将网址作为输入而是路径......我浪费了几个小时,这基本上意味着en/default.aspx
将转化为
你需要在路径中使用反斜杠
en\default.aspx
答案 2 :(得分:0)
好的,我找到了UTF8WorkerRequest,但它只用于将SimpleWorkerRequest设置为UTF8编码(它是UTF16内部)。遗憾!
public class UTF8WorkerRequest : SimpleWorkerRequest
{
private TextWriter theWriter;
public UTF8WorkerRequest(string page, string query, TextWriter output) : base(page, query, output)
{
theWriter = output;
}
public UTF8WorkerRequest(string appVirtualDir, string appPhysicalDir, string page, string query, TextWriter output) : base(appVirtualDir, appPhysicalDir, page, query, output)
{
theWriter = output;
}
public override void SendResponseFromMemory(byte[] data, int length)
{
theWriter.Write(System.Text.Encoding.UTF8.GetString(data));
}
}