gpt4 book ai didi

c# - MVC 将 post 参数传递给字典

转载 作者:太空狗 更新时间:2023-10-29 20:56:12 26 4
gpt4 key购买 nike

我有一个返回 ResultObjekt 的 MVC 应用程序处理完 FormulaData目的。这是一个通过 HTTP-Post 调用的 rest API

[HttpPost]
[ActionName("GetResult")]
public ResultObjekt GetResult([FromBody]FormularData values)
{

}

问题:有没有办法从 values 中读取所有属性?进入 Dictionary<string, string>IEnumerable<KeyValuePair<string, string>>

例如

public class FormularData
{
public string Item1 { get; set; }
public string Item2 { get; set; }
}

结果应该是 Dictionary<string,string>()IEnumerable<KeyValuePair<string, string>>

具有值 { {"Item1","Value1"}, {"Item2","Value2"}}

我之前的解决方案适用于 QuerystringHttpGet而不是 HttpPost自从我改变了,Request.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value)不再工作了。


这是我当前的 - 不太漂亮的解决方案:

[HttpPost]
[ActionName("GetResult")]
public ResultObjekt GetResult([FromBody]FormularData values)
{
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>();
if (!string.IsNullOrEmpty(values.Item1))
{
list.Add(new KeyValuePair<string, string>("Item1", values.Item1));
}
if (!string.IsNullOrEmpty(values.Item2))
{
list.Add(new KeyValuePair<string, string>("Item2", values.Item2));
}
IEnumerable<KeyValuePair<string, string>> result = list.AsEnumerable();
}

最佳答案

正如许多人在评论中提到的那样,理想情况下应该使用可以保存表单值的模型。根据我的意见,这也是最简洁的方式,因为我发现它更有条理。

如果您需要同时访问两者,请尽可能先尝试重构/重组代码。在我看来,考虑到表单数据是模型数据的子集,为什么还要尝试访问已经绑定(bind)到我们模型的原始表单数据。

如果重构/重组是不可能的,并且您需要访问两者,那么有几种方法可以做到这一点。

  1. 选项 1:使用 FormCollection :

    [HttpPost]
    public ResultObjekt GetResult(FormCollection formCol, FormularData model)
    {
    //Note that here both FormCollection and FormularData are used.
    //To get values from FormCollection use something like below:
    var item1 = formCol.Get("Item1");
    }
  2. 选项 2:使用 Request.Form :

    [HttpPost]
    public ResultObjekt GetResult(FormularData model)
    {
    //To get values from Form use something like below:
    var formData = Request.Form;
    var item1 = formData.Get("Item1");
    }

希望这对您有所帮助。

更新:正如 Lali 所指出的那样,无论您使用 FormCollection 还是 Request.Form,您都可以将其转换为字典:formData.AllKeys.ToDictionary(k => k, v => formData [v])(未经测试),因为两者都是 NameValueCollection

类型

关于c# - MVC 将 post 参数传递给字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com