0

我正在创建一个将通过 Amazon SES 发送电子邮件的 Web 服务。我想将服务(API)与将接收要发送的数据的实际应用程序分开。所以我想要发送服务的只是邮件的收件人地址、主题行和呈现的 html 正文。本例中的服务将是 C# 中的 MVC 操作结果方法,我想以 JSON 格式发布信息。通常,当我将数据发布到 Web 服务时,数据非常小且简洁。

所以我的问题是,有没有更好的方法将 html 提交到 web 服务,而不是仅仅发送像这样格式的 JSON?对它进行base64编码是个好主意吗?或者有没有更好的方法来一起做这一切?

发布正文。

{
   "to" : "asdasd@email.com",
   "subject":"hello",
   "body":"<html><body><h1>asdasd</h1></body></html>"
}

我的模型看起来像。

public class EmailMessage
{
    public string toAddress { get; set; }
    public string subject { get; set; }
    public string body { get; set; }
}

然后我的行动结果看起来像......

 [HttpPost]
 public ActionResult SendEmail(EmailMessage msg)
 {

      //Send an email

 }

有一个更好的方法吗?在此先感谢您的帮助。

4

1 回答 1

0

如果您担心请求响应的大小,可以添加 GZip 支持。

public class CompressAttribute : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpRequestBase request = filterContext.HttpContext.Request;

            string acceptEncoding = request.Headers["Accept-Encoding"];

            if (string.IsNullOrEmpty(acceptEncoding)) return;

            acceptEncoding = acceptEncoding.ToUpperInvariant();

            HttpResponseBase response = filterContext.HttpContext.Response;

            if (acceptEncoding.Contains("GZIP") && response.Filter != null)
            {
                response.AppendHeader("Content-encoding", "gzip");
                response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
            }
            else if (acceptEncoding.Contains("DEFLATE") && response.Filter != null)
            {
                response.AppendHeader("Content-encoding", "deflate");
                response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
            }
        }
    }

然后在您的控制器中将属性添加到操作或控制器本身:

[Compress]
public class AccountController : Controller
于 2013-06-06T16:21:40.407 回答