参数值不一致 - Azure API App Client在本地调用IIS Hosted API

时间:2015-10-14 18:01:13

标签: c# ajax azure iis

我整天坐着都无法理解这一点。我已经在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);
}

我期待得到一些反馈,告诉我在这里做错了什么。

此致

1 个答案:

答案 0 :(得分:0)

首先感谢您的有益评论,这些评论让我朝着正确的方向前进。

我将API和Web配置为通过Fiddler代理并查看请求,没有任何重要的不同。

然后我再次开始查看我发送的内容(图片),结果发现这是一个尺寸问题,较大的图片没有通过,但较小的没有。我搜索了ASP.NET应用程序的默认大小,它是4096 kB,我的一个图像比这大!

system.web部分的web.config中的这一行解决了这个问题。

<httpRuntime targetFramework="4.5" maxRequestLength="8192"/>    

这对我来说是一个很好的学习,我希望它可以帮助其他人通过线路发送大文件的新手!

谢谢!