我只是想写一个多部分解析器,但事情变得复杂了,想问一下是否有人知道 C# 中有一个现成的解析器!
为了清楚起见,我正在编写自己的“小型”http服务器,并且也需要解析多部分表单数据!
在此先感谢,
我只是想写一个多部分解析器,但事情变得复杂了,想问一下是否有人知道 C# 中有一个现成的解析器!
为了清楚起见,我正在编写自己的“小型”http服务器,并且也需要解析多部分表单数据!
在此先感谢,
我在这里开源了一个 C# Http 表单解析器。
这比 CodePlex 上提到的另一个稍微灵活一些,因为您可以将它用于 Multipart 和 non-Multipart form-data
,并且它还为您提供了在Dictionary
对象中格式化的其他表单参数。
这可以按如下方式使用:
非多部分
public void Login(Stream stream)
{
string username = null;
string password = null;
HttpContentParser parser = new HttpContentParser(stream);
if (parser.Success)
{
username = HttpUtility.UrlDecode(parser.Parameters["username"]);
password = HttpUtility.UrlDecode(parser.Parameters["password"]);
}
}
多部分
public void Upload(Stream stream)
{
HttpMultipartParser parser = new HttpMultipartParser(stream, "image");
if (parser.Success)
{
string user = HttpUtility.UrlDecode(parser.Parameters["user"]);
string title = HttpUtility.UrlDecode(parser.Parameters["title"]);
// Save the file somewhere
File.WriteAllBytes(FILE_PATH + title + FILE_EXT, parser.FileContents);
}
}
我遇到了一些基于字符串解析的解析器问题,特别是对于大文件,我发现它会耗尽内存并且无法解析二进制数据。
为了解决这些问题,我在这里开源了我自己对 C# multipart/form-data 解析器的尝试
有关更多信息,请参阅我的答案。
查看新的 MultipartStreamProvider 及其子类(即 MultipartFormDataStreamProvider)。如果没有任何内置实现适合您的用例,您也可以创建自己的实现。
现在有了 Core,您可以使用 HttpContext.Request.Form 访问 IFormCollection。
保存图像的示例:
Microsoft.AspNetCore.Http.IFormCollection form;
form = ControllerContext.HttpContext.Request.Form;
using (var fileStream = System.IO.File.Create(strFile))
{
form.Files[0].OpenReadStream().Seek(0, System.IO.SeekOrigin.Begin);
form.Files[0].OpenReadStream().CopyTo(fileStream);
}
我最近遇到了一个类似的问题,感谢 Anthony 在http://antscode.blogspot.com/上的多部分解析器。