当前位置: 首页 > 知识库问答 >
问题:

是否有一种从ASP转发表单的简单方法。NETMVC到ASP。NET API?

孔皓
2023-03-14

假设我有一个这样的ViewModel来自ASP. NET MVC中提交的表单:

public class EditProfileViewModel
{
    public string DisplayName { get; set; }
    public IFormFile Photo { get; set; }
}

我可以在控制器中很容易地接收到:

public async Task<IActionResult> OnPost([FromForm] EditProfileViewModel edits)
{
    // edits contains form data, great
}

但是现在我想把它转发到后端API,也使用ASP. NET。包括文件上传。最简单的方法似乎是使用MultipartFormDataContent创建一个新的HttpClient表单POST。但据我所知,虽然从表单内容到模型类的转换在接收请求时是透明的,但创建MultipartFormDataContent需要对键值对进行硬编码。

我知道这样做是可能的:

var form = new MultipartFormDataContent()
form.Add(new StringContent(edits.DisplayName), "displayName")
var content = new StreamContent(edits.Photo.OpenReadStream());
content.Headers.ContentType = MediaTypeHeaderValue.Parse(file.ContentType)
form.Add(content, "photo") // Is this the right capitalization ?? See how error prone this is?

var result = await client.PostAsync("some-api", form);

但是,对于重复的声明,这是冗长且容易出错的。此外,要在接收端使用相同的模型类进行反序列化,需要了解转换的魔力。

有没有更好的方法将模型类转换回MultipartFormDataContent?或者,如果这是一个XY问题,将此表单模型转发到后端ASP的更好方法。NET API?

共有1个答案

桑璞
2023-03-14

需要转换魔法的知识

这就是问题所在——MultipartFormDataContent可以用来将表单发布到任何网络应用程序,代码不知道潜在的解析魔法,因为它需要被告知接收端期望它的格式。

一个web框架可以区分大小写,而另一个需要小写或完全匹配的大小写。或者对于数组,一个可以支持字段名称的重复(name="foo"name="foo",...),另一个可能需要一个[]后缀(name="foo[]"name="foo[],...)和又一个可能需要索引(name=foo[0]name=foo[1],...)。

更不用说多级属性了:name="foo.bar"name="foo_bar",...

因此,您必须编写自己的属性到fieldname映射代码,知道您发布到哪个框架。

 类似资料:
  • 主要内容:尝试一下 - 实例,用户输入,Request.QueryString,Request.Form,表单验证Request.QueryString 和 Request.Form 命令用于从表单取回信息,比如用户的输入。 尝试一下 - 实例 使用 method="get" 的表单 本例演示如何使用 Request.QueryString 命令与用户进行交互。 使用 method="post" 的表单 本例演示如何使用 Request.Form 命令与用户进行交互。 使用单选按钮的表单 本例演

  • 我们正在开发具有移动部分和网络用户界面的应用程序。Web UI使用角,我们在后端配置cors时遇到了问题。我们的代码如下(只是对我们的问题很重要的代码): 从stackoverflow上的文档和其他帖子来看,这应该是可行的,但不是。我们错过了什么? thnx 编辑: 这是邮递员的请求: 卷曲'https://guw.azurewebsites.net/api/token'-X OPTIONS-H'

  • 本文向大家介绍asp导出excel文件最简单方便的方法,包括了asp导出excel文件最简单方便的方法的使用技巧和注意事项,需要的朋友参考一下 由于excel软件能识别table格式的数据,所以asp只需要输出table格式的html代码,同时设置好contenttype,增加保存为附件的响应头即可将输出的html代码保存为xls文件。 asp导出excel文件源代码如下:

  • 问题内容: 我正在尝试将长度不定的多个数据列表输出到CSV文件。每个列表应该是输出CSV文件中的一列。有直接的做事方法吗?如果我将每个列表输出为一行,那么我将遍历每个列表并在结束时输出返回值,但是这种方法在按列工作时不起作用。 我曾想过一次逐项检查所有列表并增加一个计数器,但这也会失败,因为有些列表比另一些​​更长。为了解决这个问题,我将不得不在每次迭代时检查计数器是否在每个列表的末尾,这在计算方

  • 我一直在搜索这个主题,但没有找到我想要的。基本上,我开始用UML的所有东西,用例,类图来计划一个项目。然后我们决定使用ASP。NET MVC。该应用程序是一种O-Desk或Elance 我有用户,承包商,公司,主持人和管理员。 我有点困惑模型应该如何表示这个用户,以及如何使用asp设置权限和角色。net mvc特性。 在一个正常的应用程序中,我会为他们每个人都创建一个类,他们可能会扩展User,其

  • 本文向大家介绍简单的ASP统计制作实例,包括了简单的ASP统计制作实例的使用技巧和注意事项,需要的朋友参考一下 我做了一个网站,当然啦,跟大家一样,也摆了个计数器在上面,每天看计数器都在不断的翻,心里很高兴,不过后来我又想,到底是谁看了我的网站啊?是新朋友还是老朋友啊?也不知他们来了多少次,我还想给他们都编上号,于是我申请了 免费统计,不过一连换了N个都不满意,唉,看来,只有自己动手才能丰衣足食了