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