繁体   English   中英

如何使用 model in.Net Core 应用程序渲染 Razor 页面并使用 HttpClient 发送

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM