如何在 .Net Core 应用程序中使用模型呈现 Razor 页面并使用 HttpClient 发送它
How to render Razor Page with a model in .Net Core app and send it with HttpClient
我正在开发服务,它正在生成与模型连接的动态 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);
}
但我不想 return 这个视图(详细信息)。我想通过 httpclient 发送这个动态视图。有什么建议吗?
你应该这样写:
var details = (await context (d => d.Id == id)).Details.FirstOrDefaultAsync();
您可以将视图呈现为字符串,如下所示:
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();
}
}
我正在开发服务,它正在生成与模型连接的动态 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);
}
但我不想 return 这个视图(详细信息)。我想通过 httpclient 发送这个动态视图。有什么建议吗?
你应该这样写:
var details = (await context (d => d.Id == id)).Details.FirstOrDefaultAsync();
您可以将视图呈现为字符串,如下所示:
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();
}
}