【问题标题】:web api with multiple complex parameters具有多个复杂参数的 web api
【发布时间】:2018-07-05 09:40:53
【问题描述】:

我正在尝试创建一个包含多个附件的电子邮件服务 Web api。 web api 只需要一个参数。但是,现在我有 2 个复杂的参数,这是 web api 不接受的。请建议我如何实现多个附件并仅使用一个复杂的 web api 参数。

[HttpPost]          
[ActionName("sendemail")]
public IHttpActionResult processEmail(EmailModel emailModel, 
List<HttpPostedFileBase> attachments)
{
 ........
}

电子邮件模型

 public class EmailModel
    {  
        public string ToAddress { get; set; }
        public string FromAddress { get; set; }       
        public string Body { get; set; }

    } 

并且,在电子邮件控制器中,我使用列表将附件附加到 MailMessage 对象。

 foreach (HttpPostedFileBase attachment in attachments)
   {                
            if (attachment != null)
            {
                    string fileName = Path.GetFileName(attachment.FileName);                   

                    //create linked resource for embedding image
                    LinkedResource pic = new LinkedResource(attachment.InputStream, "image/jpg");                    

                    //add linked resource to appropriate view  
                    htmlView.LinkedResources.Add(pic);
             }

     }

      //add view
      msg.AlternateViews.Add(htmlView);  

【问题讨论】:

    标签: rest asp.net-web-api mailmessage


    【解决方案1】:

    一种解决方案是接受您的电子邮件模型作为您的参数,并在 HttpContext.Request.Files 中获取上传的文件以进行循环。假设您使用 multipart/form-data 发布

    【讨论】:

    • 好的,所以在测试 MVC 应用程序中,视图和控制器具有所有邮件消息逻辑,上述工作。但是,在电子邮件控制器的主要逻辑所在的 Web API 应用程序中,我被困在如何从客户端应用程序使用电子邮件模型参数调用 Web API。
    • 您需要使用 HttpContext.Request.Form 来获取 emailmodel 并将它们包含在您的表单中。这有帮助吗?
    • 作为后续 - 如果您使用 Json.NET,您可以执行类似的操作来反序列化您的 EmailModel:var emailModel = JsonConvert.DeserializeObject&lt;EmailModel&gt;(Request.Form["emailModel"]); 假设您的客户端使用 JSON.stringify 之类的东西将您的 EmailModel 作为 JSON 发送目的。希望有帮助
    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2020-01-09
    • 2012-10-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多