Я работаю над подтверждением заказа, которое будет отправлено через SendGrid с использованием шаблона.Я борюсь за создание JSON и передачу его в шаблон в SendGrid.Любая помощь приветствуется.
Мой контроллер:
var apiKey = ConfigurationManager.AppSettings["SGAPIkey"];
var client = new SendGridClient(apiKey);
var msg = new SendGridMessage();
msg.SetFrom(new EmailAddress("orders@freshNclean.ch", "freshNclean"));
msg.AddTo(new EmailAddress(UserManager.FindById(userID).Email));
msg.SetTemplateId("d-9f76f10c08964219954067b31b3a97ad");
var orderedLineItems = DATADB.LineItemList.Where(x => x.OrderNumber == orderID).ToList();
string prd;
int qty;
decimal prc;
foreach (var item in orderedLineItems)
{
if (item.SubscriptionQuantity == 0)
{
prd = item.ProductName;
qty = item.SingleOrderQuantity;
prc = item.SingleOrderPrice;
}
else
{
prd = item.ProductName;
qty = item.SubscriptionQuantity;
prc = item.SubscriptionPrice;
}
var body = new orderConfirmation
{
receipt = true,
lineItem = new lineItem
{
product = prd,
quantity = qty,
//price = prc
},
total = "CHF " + order.OrderAmount.ToString(),
company = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressCompanyName).First(),
name = UserManager.FindById(userID).FirstName.ToString() + " " + UserManager.FindById(userID).LastName.ToString(),
address01 = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressStreet).First() + " " + DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressNumber).First(),
address02 = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressAdditional).First(),
zip = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressZIP).First(),
city = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressCity).First(),
state = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingAddressState).First(),
instructions = DATADB.ShippingAddressList.Where(x => x.UserID == userID).Where(x => x.IsDefaultShippingAddress == true).Select(x => x.ShippingInstructions).First()
};
msg.SetTemplateData(body);
};
var response = /*await*/ client.SendEmailAsync(msg);
private class orderConfirmation
{
[JsonProperty("subject")]
public string subject { get; set; }
[JsonProperty("receipt")]
public bool receipt { get; set; }
[JsonProperty("company")]
public string company { get; set; }
[JsonProperty("name")]
public string name { get; set; }
[JsonProperty("address01")]
public string address01 { get; set; }
[JsonProperty("address02")]
public string address02 { get; set; }
[JsonProperty("zip")]
public string zip { get; set; }
[JsonProperty("city")]
public string city { get; set; }
[JsonProperty("state")]
public string state { get; set; }
[JsonProperty("instructions")]
public string instructions { get; set; }
[JsonProperty("lineItem")]
public lineItem lineItem { get; set; }
[JsonProperty("total")]
public string total { get; set; }
}
private class lineItem
{
[JsonProperty("product")]
public string product { get; set; }
[JsonProperty("quantity")]
public int quantity { get; set; }
[JsonProperty("price")]
public decimal price { get; set; }
}
А код в шаблоне SendGrid выглядит следующим образом:
{{#each lineItem}}
<tr>
<td style="width:500px;max-width:85%;"><div style="text-align: left;color:#000e56">{{lineItem.product}}</div></td>
<td style="width:30px;max-width:4.5%;"><div style="text-align: right;color:#000e56">{{lineItem.quantity}}x</div></td>
<td style="width:70px;max-width:15.5%;"><div style="text-align: right;color:#000e56">CHF {{lineItem.price}}</div></td>
</tr>
{{/each}}
Моя проблема в том, что я неполучить все позиции в шаблоне, но вместо этого я получаю 3 раза одну и ту же позицию в списке.Из того, что я выяснил при тестировании, это то, что это, вероятно, связано с тремя значениями, которые я пытаюсь передать для каждой позиции (продукт, количество, цена).Любой совет, где я иду не так?