Отправка изображения в виде base64string в WebAPI; слишком длинная строка base64 - PullRequest
0 голосов
/ 08 ноября 2018

Я недавно следовал этим урокам Ахсана Сиддика

Разработка RESTful API в ASP.Net с базой данных Azure.

часть 1 https://www.c -sharpcorner.com / статьи / создание-SQL-базы данных в-лазурь-портал /

часть 2 https://www.c -sharpcorner.com / статьи / развивающихся успокоительный-Апи-в-Asp-нетто-с-надстройкой метод /

часть 3 https://www.c -sharpcorner.com / статьи / разработки-успокоительные-АПИС-в-Asp-нетто-с-извлечения-обновления-и-удалить-функции /

Использование RESTful API в Xamarin. Android

часть 4 https://www.c -sharpcorner.com / статьи / потребляя-успокоительные-АПИС-в-Xamarin-андроида /

Мне удалось заставить все коды работать, но я застрял в той части, где я пытаюсь передать строку base64 в веб-API. В учебнике не было той части, в которой я застрял. Я протестировал свой POST API на Postman и получил это сообщение об ошибке «Ошибка HTTP 414. URL-адрес запроса слишком длинный».

Ниже вы можете увидеть часть моих кодов:

public String BitmapToBase64(Bitmap bitmap)
{
    //Java.IO.ByteArrayOutputStream byteArrayOutputStream = new Java.IO.ByteArrayOutputStream();
    MemoryStream memStream = new MemoryStream();
    bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, memStream);
    byte[] byteArray = memStream.ToArray();
    return Base64.EncodeToString(byteArray, Base64Flags.Default);
}

User user = new User ();
user.ID = "1";
user.name = "Kelly";
user.profilepic = BitmapToBase64(NGetBitmap(uri)); //this is the part where base64string is too long

HttpClient client = new HttpClient();
string url = $"http://test.azurewebsites.net/api/User/{user.ID}?name={user.name}&profilepic={user.profilepic}";
var uri1 = new System.Uri(url); //base64
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response;
var json = JsonConvert.SerializeObject(feedback);
var content = new StringContent(json, Encoding.UTF8, "application/json");
response = await client.PostAsync(uri1, content);

if (response.StatusCode == System.Net.HttpStatusCode.Accepted)
{
    Toast.MakeText(this, "Your profile is updated.", ToastLength.Long).Show();
}
else
{
    Toast.MakeText(this, "Your profile is not updated." + feedback.profilepic, ToastLength.Long).Show();
}

Мне нужна помощь! Заранее спасибо!

Обновление: Вот так выглядит мой класс контроллера

public HttpResponseMessage Update_User(int ID, string name, string profilepic)
{
    if (!ModelState.IsValid)
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
    }

    UserTable newUser = new UserTable();
    var entry = db.Entry<UserTable>(newUser);
    entry.Entity.ID = ID;
    entry.Entity.name = name;
    entry.Entity.profilepic = profilepic;
    entry.State = EntityState.Modified;

    try
    {
        db.SaveChanges();
    }
    catch (DbUpdateConcurrencyException ex)
    {
        return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
    }
    return Request.CreateResponse(HttpStatusCode.Accepted, "Your profile is updated.");
}

1 Ответ

0 голосов
/ 08 ноября 2018

Как уже упоминалось в комментариях, не отправляйте изображение base64 как часть параметра url / GET.

Вместо этого прикрепите его к телу запроса POST.

var content = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("profilepic", user.profilepic)
});
var result = await client.PostAsync(url, content);
...