【问题标题】:Use same controller on multiple models在多个型号上使用相同的控制器
【发布时间】:2020-09-16 16:01:23
【问题描述】:

在使用 .net Core API 项目的 NHibernate .Net 框架中,我有 10 个模型,在保存时使用相同的功能

 public static void Save(object saveEntity, ISession session)
 {
    session.BeginTransaction();
    session.Save(saveEntity);
    session.FlushMode = NHibernate.FlushMode.Commit;
    session.Transaction.Commit();
    session.Flush();
 }

目前我已经制作了 10 个具有相同结构并返回保存的模型的控制器

 [HttpPost]
 public ActionResult<ModelName> Post([FromBody]ModelName saveItem)
 {
    if (saveItem.ID == 0)
        Core.DataStore.Repository.Default.Save(saveItem, _session);
    else
        Core.DataStore.Repository.Default.Update(saveItem,_session);
    return saveItem;
 }

对 API 的调用如下:

    public static async Task<ModelName> Save(ModelName saveItem)
    {
        using (var client = new HttpClient())
        {

            System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
            client.BaseAddress = new Uri(BaseAddress);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
            var content = new StringContent(JsonConvert.SerializeObject(saveItem), Encoding.UTF8, "application/json");
            using (var response = await client.PostAsync("api/<<ModelName>>/", content).ConfigureAwait(false))
            {
                var stringResult = (await response.Content.ReadAsStringAsync());
                ModelName result = JsonConvert.DeserializeObject<ModelName>(stringResult);
                return result;
            }
        }
    }

有什么方法可以让一个 Controller + 函数调用使用通用 T 的控制器

【问题讨论】:

    标签: c# api generics controller


    【解决方案1】:

    您必须扩展控制器发现机制来实现这一点。 这可以通过实现IApplicationFeatureProvider&lt;ControllerFeature&gt; 并拥有一个通用控制器来完成。

    可以在此处找到有关如何实现此功能的示例https://www.strathweb.com/2018/04/generic-and-dynamically-generated-controllers-in-asp-net-core-mvc/

    【讨论】:

    • 非常感谢 - 我看一下这个例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多