首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在发送带有图像的html电子邮件时使用Url.Content()

在发送带有图像的html电子邮件时使用Url.Content()
EN

Stack Overflow用户
提问于 2012-05-24 23:35:37
回答 2查看 524关注 0票数 0

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

代码语言:javascript
复制
    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();
        }
    }

这是我从here那里得到的。它工作得很好,但是我的图片没有被包括在内。我使用的是:

代码语言:javascript
复制
<img src="<%:Url.Content("~/Resource/confirmation-email/imageName.png") %>"

这给了我

代码语言:javascript
复制
http://resource/confirmation-email/imageName.png

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

我需要它给我自己:

代码语言:javascript
复制
http://domain.com/application/resource/confirmation-email/imageName.png

我也尝试过使用:

代码语言:javascript
复制
VirtualPathUtility.ToAbsolute()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-24 23:43:31

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

代码语言:javascript
复制
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");来生成绝对urls (假设您将静态函数包装在一个名为Core的类中)

HTH

票数 1
EN

Stack Overflow用户

发布于 2012-05-24 23:38:54

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

代码语言:javascript
复制
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));
    }
}

然后你可以这样调用它

代码语言:javascript
复制
<img src="<%:Url.ToAbsoluteUrl("~/Resource/confirmation-email/imageName.png") %>" ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10740705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档