我这里有一个代码,它实际上将HTML转换为PDF并将其发送给电子邮件,但是它在ActionResult中:

public ActionResult Index()
{
    ViewBag.Title = "Home Page";

    var coverHtml = RenderRazorViewToString("~/Views/Home/Test.cshtml", null);
    var htmlContent = RenderRazorViewToString( "~/Views/Home/Test2.cshtml", null);
    string path = HttpContext.Server.MapPath("~/Content/PDF/html-string.pdf");
    PDFGenerator.CreatePdf(coverHtml, htmlContent, path);


    //PDFGenerator.CreatePdfFromURL("https://www.google.com", path);
    EmailHelper.SendMail("myemail@domain.com", "Test", "HAHA", path);

    return View();
}

我想使用带有要发送到的内容ID和电子邮件地址的POST,将其转换为api格式(api / SendPDF),但是由于我对MVC和Web API还是很陌生,所以我不确定该怎么做。 赞赏一些帮助。

#1楼 票数:1

首先创建一个类,例如。 Information.cs

public class Information{
    public int ContentId {get; set;}
    public string Email {get; set;}
}

在API控制器中,

[HttpPost]
public HttpResponseMessage PostSendPdf(Information info)
{
    // Your email sending mechanism, Use info object where you need, for example, info.Email
    var coverHtml = RenderRazorViewToString("~/Views/Home/Test.cshtml", null);
    var htmlContent = RenderRazorViewToString( "~/Views/Home/Test2.cshtml", null);
    string path = HttpContext.Server.MapPath("~/Content/PDF/html-string.pdf");
    PDFGenerator.CreatePdf(coverHtml, htmlContent, path);


    //PDFGenerator.CreatePdfFromURL("https://www.google.com", path);
    EmailHelper.SendMail(info.Email, "Test", "HAHA", path);


    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, products);
    return response;
}

#2楼 票数:1 已采纳

您可能需要创建一个ApiController (看起来您正在从System.Web.Mvc实现Controller 。请确保在项目中包含Web API。

我在示例中使用以下模型:

public class ReportModel
{
    public string ContentId { get; set; }
    public string Email { get; set; }
}

这是用于发送PDF的ApiController示例:

public class SendPDFController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post([FromUri]ReportModel reportModel)
    {
        //Perform Logic
        return Request.CreateResponse(System.Net.HttpStatusCode.OK, reportModel);
    }
}

这使您可以在URI中传递参数,在本例中为http://localhost/api/SendPDF?contentId=123&email=someone@example.com 此格式将与Visual Studio包含在WebApiConfig的默认路由WebApiConfig

 config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

您还可以在请求的正文中传递参数。 您可以这样更改Post方法:

[HttpPost]
public HttpResponseMessage Post([FromBody]ReportModel reportModel)
{
    //Perform Logic
    return Request.CreateResponse(HttpStatusCode.OK, reportModel);
}

然后,您的请求URI将为http://localhost/api/SendPDF ,Content-Type标头为application/json和Body:

{
    "ContentId": "124",
    "Email": "someone@example.com"
}

如果在主体中传递参数,则JSON请求已为您序列化到模型中,因此您可以从方法中的reportModel对象访问报表所需的参数。

  ask by Raymund Evangelista translate from so

未解决问题?本站智能推荐:

1回复

来自实体c#的Post(HTTP)值的正确方法

所以,我是实体的新手。 我正在尝试发布一些值,但无法在另一个模型类中获取一个模型类的值。 如果我正在考虑做错事,我感谢有关正确方法的任何帮助。 模型类别1(结果) 模型类别2(respLysholm): 在我的控制器中,我收到了一个值为“ resultados”和值为“ resp
1回复

NReco线程安全吗?有什么解决方法吗?在C#中

我正在用线程池测试nReco,我想知道它是否线程安全,是否有其他解决方法? nReco pdf生成器的详细信息:免费版本:v2.0.50727
1回复

使用C#WebAPIEF中的POST方法从数据库列出数据

我正在研究一个项目,其中一项要求是能够列出价值故事,而无需使用GET方法。 我的控制器代码在这里: 这是我模型中的代码: 我试图通过使用邮递员通过仅在身体上提供ID来对其进行测试,但我收到此错误[link] https://ibb.co/gn5mZ5 我大约2个月前才开始学习C#
1回复

使用NRecoHTML-to-PDFC#更改ToC字体和大小

我正在使用NReco在C#项目中将 HTML视图转换为PDF文件。 一切工作正常,但是我正在努力设置生成的ToC的Font-Family和Font-Size属性,因为它与文档的其余部分不匹配。 这是我目前的代码: 有一个名为CustomWkHtmlTocArgs可用属性,我知道我应该使
1回复

C#MVC使用NReco.PdfGenerator从View生成PDF

我目前在一个项目中,需要创建一个“仪表板”,可以将其导出为pdf。 我想使用Rotativa,但由于我们的应用程序使用.NET Framework 4.0,因此不可能。 因此,我找到了NReco PdfGenerator。 现在就是我创建PDF结果的代码: 它成功创建了PDF页面,其
1回复

有没有一种方法可以使用NReco.PdfGeneratorC#在不同的页面上设置不同的标题?

我们分别有不同的PDF标头和正文模板。 现在我们想要在不同页面上使用不同的标题。 我们正在使用NReco将HTML转换为PDF,版本为1.1.12。
2回复

C#NRecoHtmlToPdfConverter页面宽度

我试图从HTML字符串创建PDF文件,基本上HTML是具有几列的表格。 问题是,当我生成PDF文件时,我看不到所有列。 我尝试了几种选择,但到目前为止还没有运气: 同样,所有HTML元素(例如body和table)的width = 100% 如何使HTML适应一页? 这是HTM
2回复

HTML使用Nreco错误渲染为PDF

我正在做一个HTML到PDF程序,我发现nreco是那里最好的。 因为转换后的pdf包含正确的字体名称。 不像我测试过的那些。 字体名称是随机字母。 这是我的转换代码。 但是问题是它不能像我的html中那样显示PDF中的图像。 这是我的示例html的样子 在此处输入图片说明