ASP.NET Web API不允许使用冗长的base64 URI

我试图从我的Android客户端接收一个冗长的base64字符串,然后将其解码为我的Web API项目中的位图,以便作为图像上载到Azure BLOB存储。 但是,该项目会返回此消息并拒绝接受参数:

请求URL太长

HTTP错误414.请求URL太长。

显然base64字符串很长。 我如何解决这个问题并接受参数? 我查看了一下类似的问题,但没有一个答案明确表示要在Web API中修复它。 谢谢!

以下是我的方法中的代码片段:

[HttpPost]
[Route("api/addnewpost")]
public IHttpActionResult AddNewMediaActivity(string base64String, string caption, string email, string type)
{
            byte[] f = Convert.FromBase64String(base64String);
            //more code........
}

Android上的我的客户端代码:

HttpClient hc = new DefaultHttpClient();
String message;

HttpPost p = new HttpPost("http://mymobileaddress.azure-mobile.net/api/addactivity?base64String=" + image + "&caption=" + caption + "&email=" + email + "&type=" + type );
JSONObject object = new JSONObject();
try {
            object.put("base64String", image);
            object.put("email", image);
            object.put("base64String", image);

} catch (Exception ex) {

}

try {
           message = object.toString();

            p.setEntity(new StringEntity(message, "UTF8"));
            p.setHeader("Content-type", "application/json");
            p.setHeader("ACCEPT", "application/json");
            p.setHeader("X-ZUMO-APPLICATION", mobileServiceAppId);
            HttpResponse resp = hc.execute(p);
            if (resp != null) {
                if (resp.getStatusLine().getStatusCode() == 204)
                {

                }
            }

            Log.d("ER", "" + resp.getStatusLine().getStatusCode());
        } catch (Exception e) {
            e.printStackTrace();

        }

数据既可以在请求的URL中传输,也可以在正文中传输。 您目前正在传输网址中的数据。 而URL只允许有限长度。 相反,把你的base64字符串放在正文中。 请参阅ASP.NET Web API中的参数绑定。

默认情况下,简单的参数,如字符串,从URI中拉出。 要强制Web API在主体中查找它,我们将[FromBody]属性添加到参数中。

[HttpPost]
[Route("api/addnewpost")]
public IHttpActionResult AddNewMediaActivity(string caption, string email,
    string type, [FromBody] string base64String)
{
    byte[] f = Convert.FromBase64String(base64String);
    //more code........
}

并更改您的Android客户端代码,将base64字符串放入正文中,而不是URL。 自从我碰到Java之后已经有一段时间了,我不知道你在使用什么库,但是我想象当你构建HTTP请求时,你可以选择将一些数据添加到请求。


(我已经删除了另一个,我想保留这个,因为问题是使用asp.net 5 beta 8,而且是最近的)

最近我有这个问题,并且参数被移动以接收来自Body的byte [](byte数组)

首先,我尝试从正文接收字符串,但字符串被截断,文件无法在服务器端重新创建。

在我的应用程序中,base64来自对输入文件创建的数组缓冲区的转换。

base64是从角度发送的json。

链接地址: http://www.djcxy.com/p/45851.html

上一篇: ASP.NET Web API does not allow Lengthy base64 URI

下一篇: How can I send POST data through url.openStream()?