0

我需要我的应用程序向用户发送确认电子邮件。我使用以下方法将视图呈现为字符串:

    public string RenderViewToString<T>(string viewPath, T model)
    {
        using (var writer = new StringWriter())
        {
            var view = new WebFormView(viewPath);
            var vdd = new ViewDataDictionary<T>(model);
            var viewCxt = new ViewContext(ControllerContext, view, vdd, new TempDataDictionary(), writer);
            viewCxt.View.Render(viewCxt, writer);
            return writer.ToString();
        }
    }

我从这里得到的。它工作得很好,但是我的图像不包括在内。我正在使用:

<img src="<%:Url.Content("~/Resource/confirmation-email/imageName.png") %>"

这给了我

http://resource/confirmation-email/imageName.png

这在查看网站上的页面时可以正常工作,但是图像链接在电子邮件中不起作用。

我需要它给我:

http://domain.com/application/resource/confirmation-email/imageName.png

我也尝试过使用:

VirtualPathUtility.ToAbsolute()
4

2 回答 2

1

这是我最近在一个网站上使用的:

public static string ResolveServerUrl(string serverUrl, bool forceHttps = false, bool getVirtualPath = true)
{
    if (getVirtualPath)
    serverUrl = VirtualPathUtility.ToAbsolute(serverUrl);

    if (serverUrl.IndexOf("://") > -1)
    return serverUrl;

    string newUrl = serverUrl;
    Uri originalUri = System.Web.HttpContext.Current.Request.Url;
    newUrl = (forceHttps ? "https" : originalUri.Scheme) + "://" + originalUri.Authority + newUrl;
    return newUrl;
}

然后我可以使用它来生成绝对网址Core.ResolveServerUrl("~/Resource/confirmation-email/imageName.png");(假设您将静态函数包装在名为 Core 的类中)

高温高压

于 2012-05-24T15:43:31.487 回答
0

没有办法做到这一点。您可以添加以下扩展方法。

using System.Web.Mvc;

public static class UrlHelperExtensions
{
    public static string ToAbsoluteUrl(this UrlHelper helper, string relativeUrl) {
        if (Request.IsSecureConnection)
            return string.Format("https://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl));
        else
            return string.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl));
    }
}

然后你可以这样调用

<img src="<%:Url.ToAbsoluteUrl("~/Resource/confirmation-email/imageName.png") %>" ...
于 2012-05-24T15:38:53.627 回答