因此,这里的问题:我建立电子邮件将通过我的应用程序通过渲染完整视图页面为字符串并将它们发送发送。 因为我不是重定向到另一个网址的网站上以后这工作没有任何问题,所以长。 每当我尝试,我得到“System.Web.HttpException:HTTP标头之后被送往不能重定向。”
我认为,问题来自我重用从控制器动作,其中呼吁创建电子邮件来自上下文的事实。 更具体地,从上下文获取HttpResponse。 不幸的是,我不能创建一个新的HttpResponse,使得使用HttpWriter的,因为类的构造函数不可达,并使用自TextWriter派生的任何其他类导致response.Flush()抛出异常,本身。
有没有人有一个解决方案?
public static string RenderViewToString(
ControllerContext controllerContext,
string viewPath,
string masterPath,
ViewDataDictionary viewData,
TempDataDictionary tempData)
{
Stream filter = null;
ViewPage viewPage = new ViewPage();
//Right, create our view
viewPage.ViewContext = new ViewContext(controllerContext,
new WebFormView(viewPath, masterPath), viewData, tempData);
//Get the response context, flush it and get the response filter.
var response = viewPage.ViewContext.HttpContext.Response;
//var response = new HttpResponseWrapper(new HttpResponse
// (**TextWriter Goes Here**));
response.Flush();
var oldFilter = response.Filter;
try
{
//Put a new filter into the response
filter = new MemoryStream();
response.Filter = filter;
//Now render the view into the memorystream and flush the response
viewPage.ViewContext.View.Render(viewPage.ViewContext,
viewPage.ViewContext.HttpContext.Response.Output);
response.Flush();
//Now read the rendered view.
filter.Position = 0;
var reader = new StreamReader(filter, response.ContentEncoding);
return reader.ReadToEnd();
}
finally
{
//Clean up.
if (filter != null)
filter.Dispose();
//Now replace the response filter
response.Filter = oldFilter;
}
}