C# 如何使用Flurl上传文件和表单数据?

C# 如何使用Flurl上传文件和表单数据?,c#,flurl,C#,Flurl,我正试图上传一个包含正文内容的文件。PostMultipartAsync是唯一的方法吗 在我的C#后端代码中,我有以下内容: var resource = FormBind<StorageFileResource>(); var file = Request.Files.First().ToPostedFile(); 前端正在发出的当前请求: 有多种方法可以使用Flurl将“部分”添加到多部分文章中。我还没有将此添加到中,但这里有一个来自的示例,基本上演示了所有可能性: var r

我正试图上传一个包含正文内容的文件。
PostMultipartAsync
是唯一的方法吗

在我的C#后端代码中,我有以下内容:

var resource = FormBind<StorageFileResource>();
var file = Request.Files.First().ToPostedFile();
前端正在发出的当前请求:


有多种方法可以使用Flurl将“部分”添加到多部分文章中。我还没有将此添加到中,但这里有一个来自的示例,基本上演示了所有可能性:

var resp = await "http://api.com"
    .PostMultipartAsync(mp => mp
        .AddString("name", "hello!")                // individual string
        .AddStringParts(new {a = 1, b = 2})         // multiple strings
        .AddFile("file1", path1)                    // local file path
        .AddFile("file2", stream, "foo.txt")        // file stream
        .AddJson("json", new { foo = "x" })         // json
        .AddUrlEncoded("urlEnc", new { bar = "y" }) // URL-encoded                      
        .Add(content));                             // any HttpContent

ToPostedFile
是否返回一个?另外,什么是
资源
,它在这里的相关性如何
file
应该包含您想要发布的所有内容,否?另外,关于使用Flurl上载文件的“这是唯一的方法吗”:从技术上讲,否,但是您调用的API或web服务应该定义它所需的格式,可以是
多部分/表单数据
或其他格式。这是首先要了解的重要部分。@ToddMenier嗨,Todd,关于第一个问题,不,这是一个本地类。我阅读了
HttpFile
的列表。Resource是我的ViewModel类,我只将请求字段与该类绑定,这里的目的是显示我正在分别读取其他字段。至于第三部分,它是一个需要
多部分/表单数据的API
,请查看我的更新答案,看看今天使用前端是如何完成的。你是在问如何完成同时需要文件和JSON对象的多部分post吗?@ToddMenier yup:)谢谢!我必须为每个属性使用
AddJson
,因为我需要在表单的请求体中使用它,只需使用
AddJson(“json”,data)
对象在json属性内、表单属性内序列化。谢谢:)我正试图通过
AddStringParts
方法发送嵌套属性,但它会生成
dynamic.ToString()
,这是无效的json。我只需要通过分离点来展平嵌套属性new{User=new{Name=“Ahmed”}`=>
User.Name=“Ahmed”
@guneysus我认为这不是一个非常常见的场景,Flurl没有对它的直接支持。您需要自己将其分类,然后执行
.AddString(“User.Name”,“Ahmed”)
。(作为旁注,此场景与JSON无关。
User={“Name”:“Ahmed”}
是将其作为JSON编码值传递的方式,这一点更为常见。)我找到了答案。谢谢。如果您也能演示如何在flurl中断言此多部分调用,我将不胜感激。具体来说,如果请求包含给定的部分和内容。
var resp = await "http://api.com"
    .PostMultipartAsync(mp => mp
        .AddString("name", "hello!")                // individual string
        .AddStringParts(new {a = 1, b = 2})         // multiple strings
        .AddFile("file1", path1)                    // local file path
        .AddFile("file2", stream, "foo.txt")        // file stream
        .AddJson("json", new { foo = "x" })         // json
        .AddUrlEncoded("urlEnc", new { bar = "y" }) // URL-encoded                      
        .Add(content));                             // any HttpContent