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

ASP.NET Web API不允许使用冗长的base64 URI,asp.net,web-services,asp.net-web-api,Asp.net,Web Services,Asp.net Web Api,我正试图从我的Android客户端接收一个很长的base64字符串,然后将其解码为Web API项目中的位图,作为图像上传到Azure BLOB存储中。但是,项目返回此消息并拒绝接受以下参数: 请求URL太长 HTTP错误414。请求URL太长 显然base64字符串很长。我如何绕过这个问题并接受参数?我在堆栈中查找了一个类似的问题,但没有一个答案明确说明如何在Web API中修复它。谢谢大家! 下面是我的方法中的代码片段: [HttpPost] [Route("api/addnewp

我正试图从我的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中传输数据。URL的长度是有限的。相反,将base64字符串放在主体中。看

默认情况下,从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接收字节[](字节数组)

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

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


base64以json格式从angular发送。

@Zaki不走运。不起作用:(通常的方式是通过正文发布数据…,而不是通过url…@Selvin请解释,我在这方面有点落后,我没有意识到这一点:(嗯,互联网上有成千上万的例子……搜索FromBody attributeah伙计,你的答案看起来像是真的,但我很难在我的客户端中找到通过body发布base64的方法。我会接受这一点,但是如果你知道在android中发布base64字符串的方法,一定要让我知道:)@Earthling我需要知道你用什么Java库发送HTTP请求。我用的是ApacheHttpClient,mate@Earthling?请在您的问题中编辑生成HTTP POST请求的相关Android代码。是否有帮助?