将呈现的html页面发布到Web服务?传输数据的最佳方式?

时间:2013-06-06 15:38:42

标签: c# asp.net-mvc rest actionresult

我正在创建一个通过Amazon SES发送电子邮件的Web服务。我想将服务(API)与将要发送数据的实际应用程序分开。所以我想要发送的服务是消息的地址,主题行和呈现的html主体。在这种情况下,服务将成为C#中的MVC动作结果方法,我想在JSON中发布信息。通常,当我将数据发布到Web服务时,数据非常小而且简洁。

所以我的问题是,有没有更好的方法将html提交给webservice,而不是像这样发送格式化的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

 }

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

1 个答案:

答案 0 :(得分: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