【问题标题】:Use non-default constructor for Razor Pages为 Razor 页面使用非默认构造函数
【发布时间】:2019-09-01 14:22:17
【问题描述】:

我有一个使用 Razor Pages 和 Mediatr 的 asp.net core 2.2 Web 应用程序。

我的查询在 Jimmy Bogard 的博客中有私人设置器 described

public class Query : IRequest<Result>
{
    public Query(string needle)
    {
        this.Needle = needle;
    }

    public string Needle { get; private set; }
}

当我在我的 web api 中使用它时,它没问题(即使 ConstructionHandling 也不需要)

但是当我使用 Razor Pages 时出现错误,因为查询中没有无参数 ctor:

public class SearchModel : PageBaseModel
{
    public SearchModel(IMediator mediator)
        : base(mediator)
    {
    }

    [BindProperty(SupportsGet = true)]
    public Accounts.Search.Query Query { get; set; }

    public Accounts.Search.Result Result { get; private set; }

    public async Task<IActionResult> OnGetAsync(CancellationToken cancellationToken)
    {
        Result = await this.Mediator.Send(Query, cancellationToken);

        return this.Page();
    }
}

是否可以使用私有 setter 进行模型绑定(无需为每个查询写入 custom IModelBinder)?

【问题讨论】:

标签: c# asp.net-core model-binding mediatr


【解决方案1】:

是否可以使用私有 setter 进行模型绑定(无需为每个查询写入 custom IModelBinder

强调我的

简短回答:否

这里长答案Model Binding in ASP.NET Core: Complex types

复杂类型必须具有公共默认构造函数和公共可写属性才能绑定。发生模型绑定时,将使用公共默认构造函数实例化该类。

再次强调我的

我相信您通过尝试使用不可变消息请求作为绑定模型来混合关注点。

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 2021-05-21
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多