我对TagHelper在ASP.NET Core MVC 中引入的行为感到困惑.按照本教程一个有效的电子邮件Tag Helper,我们有机会编写自动关闭标签.根据这篇文章,我们应该使用attbute HtmlTargetElement.下面的类是示例:
[HtmlTargetElement("email", TagStructure = TagStructure.WithoutEndTag)]
public class EmailTagHelper : TagHelper
{
private const string EmailDomain = "contoso.com";
public string MailTo { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
var address = MailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + address);
output.Content.SetContent(address);
}
}
Run Code Online (Sandbox Code Playgroud)
剃刀视图中的标记如:
<strong>Support:</strong>
<email mail-to="Support"/><br />
<strong>Marketing:</strong>
<email mail-to="Marketing"/>
Run Code Online (Sandbox Code Playgroud)
但我有意想不到的输出:
<strong>Support:</strong>
<a href="mailto:Support@contoso.com">
<span>Another content</span>
<strong>Marketing:</strong>
</a>
<a href="mailto:Marketing@contoso.com"></a>
Run Code Online (Sandbox Code Playgroud)
为什么第一个锚标记包含<span> …
我读到MVC中间件框架内部使用带有控制器操作的日志范围:
谨慎使用范围,仅适用于有界限开始和结束的操作.例如,框架提供了围绕MVC操作的范围.避免将许多范围嵌套在一起.
和
范围是通过调用ILogger.BeginScope方法返回的IDisposable类型,该方法从创建它到处理它的那一刻持续.任何日志记录状态(例如事务标识)在创建范围时附加到范围.
我正在尝试使用此功能来编写一些日志信息.我执行了以下步骤:
1)创建Asp.net核心MVC应用
2)在appsetting.json中将属性"IncludeScopes"设置为"true"
3)创建控制器和动作,如下所示:
[Route("api/[controller]")]
public class TodoController : Controller
{
private readonly ILogger<TodoController> _logger;
public TodoController(ILogger<TodoController> logger)
{
_logger = logger;
}
// GET: api/values
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogInformation(1000, "Listing all items started");
Thread.Sleep(2000);
_logger.LogInformation(1000, "Listing all items finished");
return new string[] { "value1", "value2" };
}
}
Run Code Online (Sandbox Code Playgroud)
我希望我的日志消息流始终只包含"列出所有项目已启动"和"列出所有已完成的项目"部分,这些部分彼此不相互分离.但当我在同一时间启动两个请求时,得到的日志流如下:
RequestId:xxx列出所有项目已启动
RequestId:yyy列出所有项目已启动
RequestId:xxx列出所有项目已完成
RequestId:yyy列出所有项目已完成
什么原因?这是正确的行为,我在记录的背景下误解了"范围"一词吗?
是否可以在应用程序启动时使用Entity Framework Core 配置StartUp.cs或project.json运行数据库迁移?
现在我有中间件执行此任务,但它似乎对性能产生负面影响,因为正在检查每个请求收到的数据库.
public class EntityFrameworkUpdateDatabaseMiddleware
{
private readonly RequestDelegate _next;
private readonly ApplicationDbContext _dbContext;
public EntityFrameworkUpdateDatabaseMiddleware(RequestDelegate next, ApplicationDbContext dbContext)
{
_next = next;
_dbContext = dbContext;
}
public async Task Invoke(HttpContext context)
{
await _dbContext.Database.MigrateAsync();
await _next.Invoke(context);
}
}
Run Code Online (Sandbox Code Playgroud) migration entity-framework-core asp.net-core-mvc asp.net-core
我想编写一些API来使用LINQ2Entities对服务器端的实体(SQLServer)进行排序.
我有包含表达式的类表示实体的排序字段和排序方向:
public class SortOption<TEntity>
{
public SortOption(Expression<Func<TEntity, dynamic>> keySelector,
bool ascending = true)
{
KeySelector = keySelector;
Ascending = ascending;
}
public Expression<Func<TEntity, dynamic>> KeySelector { get; private set; }
public bool Ascending { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
对于我的每个实体,我都有从上面继承的类.例如:
public class PostSorting: SortOption<PostEntity>
{
public PostSorting(): base(p => p.Published)
{
}
}
public class PostEntity
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public DateTime? Published { get; set; }
public DateTime Modified { get; set; } …Run Code Online (Sandbox Code Playgroud) c# sorting linq-to-entities entity-framework specification-pattern
asp.net-core ×2
c# ×1
html ×1
logging ×1
migration ×1
razor ×1
scope ×1
sorting ×1
tag-helpers ×1