我只是想编写一个多部分解析器,但事情变得复杂,并且想知道是否有人知道C#中的现成解析器!
为了说清楚,我正在编写自己的“小”http服务器,并且需要解析多部分表单数据!
提前致谢, Gohlool
答案 0 :(得分:27)
我开源了一个C#Http表单解析器here。
这比在CodePlex上提到的另一个稍微灵活一些,因为您可以将它用于Multipart和非Multipart form-data
,并且它还为您提供格式为{{1}的其他表单参数对象。
可以使用如下:
<强>非多强>
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"]);
}
}
答案 1 :(得分:7)
我遇到了一些基于字符串解析的解析器问题,特别是对于大文件我发现它会耗尽内存而无法解析二进制数据。
为了解决这些问题,我已经开放了我自己尝试使用C#multipart / form-data解析器here
有关详细信息,请参阅我的回答here。
答案 2 :(得分:1)
查看新的MultipartStreamProvider及其子类(即MultipartFormDataStreamProvider)。如果没有任何内置实现适合您的用例,您也可以创建自己的实现。
答案 3 :(得分:0)
我有一个类似的问题,我最近解决了感谢Anthony在http://antscode.blogspot.com/的多部分解析器。
Uploading file from Flex to WCF REST Stream issues (how to decode multipart form post in REST WS)
答案 4 :(得分:0)
使用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);
}