2017-08-16 2 views
-1

Ich habe einen Code hier die eigentlich HTML zu PDF konvertiert und sendet sie an eine E-Mail, aber es ist in Action:C# ändern Action zu IHttpActionResult mit POST-Methode

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("[email protected]", "Test", "HAHA", path); 

    return View(); 
} 

ich dies in ein api-Format umwandeln möchten (api/SendPDF) verwendet POST mit der Inhalts-ID und der E-Mail-Adresse, an die es gesendet wird, aber ich bin mir nicht sicher, wie ich es machen soll, da ich sehr neu in MVC und Web API bin. Schätze etwas Hilfe dabei.

Antwort

1

werden Sie wollen wahrscheinlich ein ApiController (um es schaffen sieht aus wie Sie Controller aus System.Web.Mvc implementieren. Stellen Sie sicher, Web-API in Ihrem Projekt enthalten.

ich benutze das folgende Modell in meinen Beispielen:

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

Hier ist ein Beispiel ApiController für Ihre PDF zu senden:

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

Auf diese Weise können Sie die Parameter in der URI, in diesem Fall http://localhost/api/SendPDF?contentId=123&[email protected] passieren. Dieses Format wird mit der Standardroute arbeiten, dass Visual Studio enthält im WebApiConfig:

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

Sie auch die Parameter in den Körper Ihrer Anfrage passieren kann. Sie würden Ihr Post Methode, wie so ändern:

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

dann Ihre Anfrage URI http://localhost/api/SendPDF sein würde, Content-Type-Header als application/json und Körper:

{ 
    "ContentId": "124", 
    "Email": "[email protected]" 
} 

Wenn Sie Ihre Parameter in den Körper gelangen, Die JSON-Anforderung wurde für Ihr Modell in Ihr Modell serialisiert, sodass Sie innerhalb Ihrer Methode über das Objekt reportModel auf die Parameter zugreifen können, die Sie für den Bericht benötigen.

1

Zuerst erstellen Sie eine Klasse z. Information.cs

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

In API-Controller,

[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; 
} 
Verwandte Themen