![](/img/trans.png)
[英]How Render a PDF from a .net core razor page from byte array in page model
[英]How to render Razor Page with a model in .Net Core app and send it with HttpClient
我正在研究生成与 model 连接的动态Razor page
的服务,并且该页面需要通过HttpClient
发送到另一个服务。 这是生成视图的ActionResult
:
// GET: /Details/
public async Task<IActionResult> DetailsSend(int id)
{
if (id == null)
{
return NotFound();
}
var details = await _context.Details
.FirstOrDefaultAsync(d=> d.Id == id);
return View(details);
}
但我不想返回这个视图(详细信息)。 我想通过 httpclient 发送这个动态视图。 有什么建议吗?
您可以将视图呈现为字符串,如下所示:
public class EmployeesController : Controller
{
private readonly YourDbContext _context;
private readonly Microsoft.AspNetCore.Mvc.ViewEngines.ICompositeViewEngine _viewEngine;
public EmployeesController(ICompositeViewEngine viewEngine, YourDbContext context)
{
_viewEngine = viewEngine;
_context = context;
}
public async Task<string> DetailsSend(int id)
{
var details = await _context.Details
.FirstOrDefaultAsync(d => d.Id == id);
string view = "";
ViewData.Model = details;
using (var writer = new StringWriter())
{
ViewEngineResult viewResult = _viewEngine.FindView(ControllerContext, "Details", false);
ViewContext viewContext = new ViewContext(
ControllerContext,
viewResult.View,
ViewData,
TempData,
writer,
new HtmlHelperOptions()
);
await viewResult.View.RenderAsync(viewContext);
view = writer.GetStringBuilder().ToString();
}
return view;
}
}
然后你可以使用 HttpClient 调用这个 api 并得到如下结果:
public async Task<IActionResult> Index()
{
var url = "https://localhost:portNumber/ControllerName/detailssend/1";//it should be the url of your api
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
using (var content = response.Content)
{
//get the json result from your api
var result = await content.ReadAsStringAsync();
}
}
你应该写如下:
var details = (await context (d => d.Id == id)).Details.FirstOrDefaultAsync();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.