提问人:Wilkret 提问时间:5/24/2023 最后编辑:Wilkret 更新时间:5/24/2023 访问量:29
如何在POST Rest调用中将文件与自定义类一起放置?
How to put a file along with a custom class in a POST Rest call?
问:
我已经摸不着头脑一段时间了,我只是不知道如何使用 NLogger(Net4.7.5) 做到这一点
这个 HttpPost 请求的目的是它应该将一个 .stl 文件与 WebRequest 中的自定义类一起发送,最终我想要这样的东西: (https://i.stack.imgur.com/PyQk0.png)。
在 net6.0 中,据我所知,至少在 Web API 中,您可以很容易地使用 FileContentResult ControllerBase.File() 返回。但我还没有在net4.7.5中找到它的替代品。
这是我使用带有 NLogger 的 net4.7.5 所得到的
private static bool PingServer(string server, object seDocument)
{
HttpWebRequest webRequest = WebRequest.CreateHttp($"http://{server}//stl");
webRequest.Timeout = 5000; //Default is 100.000 (100 seconds)...
webRequest.Method = WebRequestMethods.Http.Post;
Byte[] stlFile = System.IO.File.ReadAllBytes($@"{listTempFiles[0]}");
String base64String = Convert.ToBase64String(stlFile);
//Note to future me, this doesn't need to be jsonified
var json = JsonConvert.SerializeObject(seDocument);
byte[] b = Encoding.UTF8.GetBytes(json);
switch (System.IO.Path.GetExtension(listTempFiles[0]))
{
case ".stl":
case ".STL":
webRequest.ContentType = "application/sla";
break;
case ".jt":
case ".JT":
webRequest.ContentType = ".";
break;
default:
webRequest.ContentType = "application/json";
break;
}
webRequest.ContentLength = b.Length;
using (var stream = webRequest.GetRequestStream())
{
stream.Write(b, 0, b.Length);
}
HttpWebResponse response;
try
{
response = webRequest.GetResponse() as HttpWebResponse;
}
catch (Exception e)
{
LogManager.GetCurrentClassLogger().Info(e.Message);
return false;
}
if (response != null)
{
LogManager.GetCurrentClassLogger()
.Info($"'{server}' responded with status '{response.StatusCode.ToString()}'");
}
return response == null || response.StatusCode == HttpStatusCode.OK;
}
我在net6.0中使用带有HttpGet的WebApi做了类似的事情
[HttpGet("{mainpath}/{true}")]
public List<MendixFile> GetAll(string mainpath)
{
List<MendixFile> mendixFiles = new List<MendixFile>();
string[] files = Directory.GetFiles(mainpath, "*", searchOption: SearchOption.AllDirectories);
foreach (string file in files)
{
Byte[] b = System.IO.File.ReadAllBytes($@"{file}");
string path = Path.GetDirectoryName(file);
string name= Path.GetFileName(file);
MendixFile mendixFile = new MendixFile(path, name, b);
File(b, "image/jpg");
mendixFiles.Add(mendixFile);
}
return mendixFiles;
}
注意:我无法切换到其他框架,因为 net4.7.5 有一些我只能在 net4.7.5 中使用的强制库。
附加说明:默认情况下,listTempFiles[0] 始终为 C:/Temp/Part.stl
答: 暂无答案
评论