使用 razor 模板化服务实现
本文关键字:服务 实现 razor 使用 | 更新日期: 2023-09-27 18:30:17
我正在考虑开发一种利用ASP的模板服务。NET 的 Razor 用于渲染模板和将渲染模板写入数据库 (ADO.NET)。生成模板的请求可以作为 REST 请求(但也可以是其他请求,通常必须传递大约 10 个参数),并且应用程序必须是自承载的(因此 IIS 上的 WebAPI 不是一个选择 ASP.NET)。此外,它应该在一个月内投入生产。
我已将选择范围缩小到自承载 WCF http 服务和ASP.NET vNext。
ASP.NET vNext 当前是否处于我可以将其用于此类任务的状态?我可以直接使用 ADO.NET 还是通过 EF?Tehere有什么好的替代品吗?为什么我倾向于HTTP自托管也是对并发和一次处理大约10个请求的要求。
对不起,你的问题和结论对我来说有点不清楚。托管在IIS中的WebAPI和MVC完全能够并发并处理一次处理许多请求。
您选择的数据访问框架(ADO.NET 与实体框架)也与解决方案的 Web 托管部分无关;您可以在任何类型的应用程序中使用任何宿主环境。
所以答案是:如果开发速度是你的主要关注点,请使用你熟悉的框架,因为它会带走学习曲线。
在提出问题时,我们已经决定使用 MVC 5 和 Owin,现在您可以轻松地使用 MVC 6(ASP.NET 5 aka vNext)。
使用 OWIN 托管的控制台应用的代码非常简单,正如您在许多教程中看到的那样:
private static void Main()
{
try
{
string baseAddress = ConfigurationManager.AppSettings["ApiBaseAddress"];
Log.Info("Listening on " + baseAddress);
// Starts OWIN host
using (WebApp.Start<Startup>(url: baseAddress))
{
Console.ReadLine();
}
Log.Info("Host is being closed.");
}
catch (Exception exception)
{
Log.WriteLine(LogLevel.Fatal, "Error running service: " + exception.ToString());
throw;
}
}
其中Startup
是 OWIN 中间件配置的类。此外,通常您会将其托管为 Windows 服务。
我还可以共享一个可用于模板服务的控制器实现。它需要 POST 正文中的 JSON 数据,并在 JSON 对象的根上具有TemplateEncoded
属性,其中包含 base64 编码的剃刀临时字符串。然后,从请求 JSON 中提供的其他值呈现此 razor 模板。对于剃须刀模板的呈现,使用剃刀引擎。
[HttpPost]
public async Task<IHttpActionResult> Post()
{
dynamic model = null;
string request = string.Empty;
try
{
request = await Request.Content.ReadAsStringAsync();
model = JsonConvert.DeserializeObject<ExpandoObject>(request);
model.Template = RequestHelper.FromBase64(model.TemplateEncoded);
// here you could do some validation, if required.
var razorResult = Razor.Parse(model.Template, model);
var result = HttpUtility.HtmlDecode(razorResult);
return Ok(result);
}
catch (Exception ex)
{
Log.Error(request, model == null ? "ERROR: template was not converted from base64 encoded string." : model.Template, ex);
return InternalServerError(ex);
}
}