我整天坐着都无法理解这一点。我已经在stackoverflow和网上发布了seaches,但没有找到答案。
设置
这不是最佳设置,但由于遗留代码,我必须处理它。
我在客户端Web上托管了一个FileController(API控制器)类,用于上传文件。 MVC控制器通过对FileController.UploadFiles()的角度调用jquery.ajax。 FileController.UploadFiles()从数据库中获取一些数据,然后向storageAPI发送请求,该请求以特定方式将文件存储在blob中,具体取决于CustomResponse对象中的设置参数。
问题是参数CustomResponse有时在到达控制器时为空,有时我实际上有一个值。它似乎是完全随机的。
我已经通过单击客户端GUI上的上传按钮手动测试了它,该按钮使用Ajax调用FileController,后者又调用API。客户端Web和存储API都在本地托管并托管在本地IIS上。这可能是碰撞吗?
当我使用Swagger UI进行帖子时,它不为空。然后每次都获取内容参数。
我调试时请求总是到达Storage API。所以"布线"他们之间很好。
我曾尝试同时执行异步和非异步调用,并且已将API中的方法更改为同步和异步无差异。
代码
代码
FileController(CLIENT)
byte[] fileBytes = null;
using(var memoryStream = new MemoryStream())
{
file.InputStream.CopyTo(memoryStream);
fileBytes = memoryStream.ToArray();
}
var fileBytesString = System.Text.Encoding.UTF8.GetString(fileBytes);
var settingsString = "renditions:large,thumbail;assettype:testdataimage;testdataid:" + testData.Id.ToString() + ";filename:" + fileName;
var client = new StorageAPI();
client.BaseUri = new Uri("http://storageapi.mycompany.local/");
CustomResponse response = null;
response = client.Blob.Post(new CustomRequest()
{
FileBytesString = fileBytesString,
Settings = settingsString
});
client.Dispose();
StorageAPI模型CustomRequest
public class CustomRequest
{
public string FileBytesString { get; set; }
public string Settings { get; set; }
}
StorageAPI控制器
[HttpPost]
[ResponseType(typeof(CustomResponse))]
[Route("api/Blob/")]
public HttpResponseMessage Post(CustomRequest content)
{
if (content == null)
{
return new HttpResponseMessage(HttpStatusCode.InternalServerError);
}
//Parse data and upload file to blob.
return new HttpResponseMessage(HttpStatusCode.OK);
}
我期待得到一些反馈,告诉我在这里做错了什么。
此致
答案 0 :(得分:0)
首先感谢您的有益评论,这些评论让我朝着正确的方向前进。
我将API和Web配置为通过Fiddler代理并查看请求,没有任何重要的不同。
然后我再次开始查看我发送的内容(图片),结果发现这是一个尺寸问题,较大的图片没有通过,但较小的没有。我搜索了ASP.NET应用程序的默认大小,它是4096 kB,我的一个图像比这大!
system.web部分的web.config中的这一行解决了这个问题。
<httpRuntime targetFramework="4.5" maxRequestLength="8192"/>
这对我来说是一个很好的学习,我希望它可以帮助其他人通过线路发送大文件的新手!
谢谢!