gpt4 book ai didi

c# - 如何在 Web API Controller 中接收字节数组和 json

转载 作者:行者123 更新时间:2023-11-30 15:58:32 25 4
gpt4 key购买 nike

我需要在 C# Web API 应用程序中接收一个 json 对象和一个字节数组。

这是我发送数据的方式:

public bool SendMedia(string method, Media media)
{
string filePath = Path.GetFullPath(Path.Combine(filesDirectory, media.FileName));
if (!File.Exists(filePath))
{
return false;
}
using (var client = new HttpClient())
using (var content = new MultipartContent() )
{
content.Add(new StringContent(JsonConvert.SerializeObject(media), Encoding.UTF8, "application/json"));
byte[] b = File.ReadAllBytes(filePath);
content.Add(new ByteArrayContent(b, 0, b.Length));
var response = client.PostAsync(new Uri(baseUri, method).ToString(), content).Result;
if (response.IsSuccessStatusCode)
return true;
return false;
}
}

这就是我尝试接收它的方式:

// POST: api/Media
[ResponseType(typeof(Media))]
public HttpResponseMessage PostMedia(Media media, byte[] data)
{
int i = data.Length;
HttpResponseMessage response = new HttpResponseMessage();
if (!ModelState.IsValid)
{
response.StatusCode = HttpStatusCode.ExpectationFailed;
return response;
}

if (MediaExists(media.MediaId))
WebApplication1Context.db.Media.Remove(WebApplication1Context.db.Media.Where(p => p.MediaId == media.MediaId).ToArray()[0]);
WebApplication1Context.db.Media.Add(media);


try
{
WebApplication1Context.db.SaveChanges();
}
catch (DbUpdateException)
{
response.StatusCode = HttpStatusCode.InternalServerError;
return response;
throw;
}

response.StatusCode = HttpStatusCode.OK;
return response;
}

我目前对网络开发知之甚少。发送 MultipartContent 是正确的方法吗?

最佳答案

该框架只能绑定(bind)正文中的一项,因此您尝试尝试的操作将无效。

相反,阅读您发送的请求内容并提取部分内容。

[ResponseType(typeof(Media))]
public async Task<IHttpActionResult> PostMedia() {

if (!Request.Content.IsMimeMultipartContent()) {
return StatusCode(HttpStatusCode.UnsupportedMediaType); }

var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();

var media = await filesReadToProvider.Contents[0].ReadAsAsync<Media>();
var data = await filesReadToProvider.Contents[1].ReadAsByteArrayAsync();

int i = data.Length;

if (!ModelState.IsValid) {
return StatusCode(HttpStatusCode.ExpectationFailed);
}

if (MediaExists(media.MediaId))
WebApplication1Context.db.Media.Remove(WebApplication1Context.db.Media.Where(p => p.MediaId == media.MediaId).ToArray()[0]);
WebApplication1Context.db.Media.Add(media);


try {
WebApplication1Context.db.SaveChanges();
} catch (DbUpdateException) {
return StatusCode(HttpStatusCode.InternalServerError);
}

return Ok(media);
}

另请注意,在您的原始代码中,您声明操作具有 [ResponseType(typeof(Media))] 但从未返回该类型的对象。上面的答案包括 Ok(media) 响应中的模型。

这是一个非常简单的例子。根据需要添加任何验证。

关于c# - 如何在 Web API Controller 中接收字节数组和 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43188759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com