Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 核心3.1-从正文绑定一些属性,从标题绑定另一些属性_C#_.net_Asp.net Core_.net Core - Fatal编程技术网

C# 核心3.1-从正文绑定一些属性,从标题绑定另一些属性

C# 核心3.1-从正文绑定一些属性,从标题绑定另一些属性,c#,.net,asp.net-core,.net-core,C#,.net,Asp.net Core,.net Core,我有以下型号: public class Network { public string Network { get; set; } public string Cidr { get; set; } public string TenantId { get; set; } } 以及以下端点: public async Task<ActionResult<Network>> PostNetwork(Network network) { ..

我有以下型号:

public class Network {
    public string Network { get; set; }
    public string Cidr { get; set; }
    public string TenantId { get; set; }
}
以及以下端点:

public async Task<ActionResult<Network>> PostNetwork(Network network)
{
    ...
}
公共异步任务PostNetwork(网络)
{
...
}
并且想知道是否可以将
网络
Cidr
与我的帖子
正文
中的值绑定,以及
租户
与特定标题中的值绑定

我不想把
entity.TenantId=HttpContext.Request.Headers[“TenantId”]所有控制器端点,因为此模式对于多个实体/端点是必需的


我试图创建一个自定义的中间件来编辑我的身体内容,但是这些更改没有反映在我的控制器中。还尝试使用自定义DataBinder,但未成功。

因此您需要创建自定义模型绑定器并向类添加属性

模型绑定器将继承自
IModelBinder
,并假设您的数据是JSON

public class NetworkModelBinder : IModelBinder
{
    public async Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext == null)
        {
            throw new ArgumentNullException(nameof(bindingContext));
        }

        Network model;

        string bodyAsText = await new StreamReader(bindingContext.HttpContext.Request.Body).ReadToEndAsync();
        model = JsonConvert.DeserializeObject<Network>(bodyAsText);
        model.TenantId = bindingContext.HttpContext.Request.Headers["TenantId"];
        bindingContext.Result = ModelBindingResult.Success(model);
    }
}

自定义数据绑定器出了什么问题,这应该是解决问题的方法。Eithy George,你有没有类似的例子?下面的文档对我来说不是很清楚应该如何实现它。当然,我会把它作为一个答案发布,它应该可以工作,但可能不是最好的做法,或者不是什么。我对类上的
网络
属性有一个问题,该属性说“成员名称不能与其封闭类型相同”,除此之外,它编译(对于core 2.1,但希望它在3.x中是相同的),请让我知道它是否对您有效。抱歉,这是我的错误,我在问题中更改了模型只是为了使其更简单,并且没有注意到名称冲突。是的,它有效,而且比我正在做的更干净,非常感谢。)只是做了一点修改,使其通用性和适应我的模型。谢谢
[ModelBinder(typeof(NetworkModelBinder))]
public class Network
{
    public string Network { get; set; }
    public string Cidr { get; set; }
    public string TenantId { get; set; }
}