سلام استاد خداقوت
لطفا نمونه یا لینک آموزش معتبر، برای put و delete اطلاعات زامارین در webapi قرار بدهید.
متشکرم
در بخش بعدی که post رو بگم برای put و delete هم به همین شکل خواهد بود
عرض سلام و خسته نباشید
برای put و delete متدهای webapiرو نوشتم با post man اجرا میشن و مشکلی ندارند. اما بعد از پابلیش از زامارین که صدا زده میشن خطای
result = {StatusCode: 405, ReasonPhrase: 'Method Not Allowed', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Cache-Control: private
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 08 Mar 2018 06:15:56 GMT
Allow: GET, HEAD, OPTION...
نمایش داده می شه. توی اینترنت سرچ کردم، گفته بود در web config یکسری تغییرات باید اعمال بشه. انجام دادم اما درست نشد!
لطفا کمک کنید. ممنون
خیر تغییری نیاز نیست
باید بررسی کنید ببینید خطا داره خیر
از Elmah استفاده کنید
با elmah خطای زیر رو نشون میده.
متن ارور کاملا گویاست
میگه مسیر رو پیدا نمیکنه
بله مشکل بنده هم همین هست، همون مسیری که برای post قراردادم برای put هم قراردادم ، post انجام میشه اما put انجام نمیشه!
using (var client = new HttpClient())
{
try{
string json = JsonConvert.SerializeObject(person);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
var result = client.PutAsync(ApiUrl + "/api/Xamarin", content).Result;
}
catch(Exception ex)
{
}
}
کد کامل api را قرار دهید
using info_Service.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
namespace info_Service.Controllers
{
public class XamarinController : ApiController
{
AddContext DB = new AddContext();
[HttpGet]
[Route("AllItems")]
public IEnumerable<info> GetAllInfo()
{
return DB.Adds.ToList();
}
[HttpGet]
[Route("Item/{id}")]
public info GetInfoById(int id)
{
return DB.Adds.Find(id);
}
[HttpPost]
public void PostInfo(info _info)
{
_info.CreateDate = DateTime.Now;
DB.Adds.Add(_info);
DB.SaveChanges();
}
[HttpPut]
public void PutInfo(info _info)
{
DB.Entry(_info).State = EntityState.Modified;
DB.SaveChanges();
}
[HttpDelete]
public void DeleteInfo(int id)
{
info _info = DB.Adds.Find(id);
DB.Entry(_info).State = EntityState.Deleted;
DB.SaveChanges();
}
[Route("PostEmployeeImage")]
[AllowAnonymous]
public async Task<HttpResponseMessage> PostAdsImage()
{
Dictionary<string, object> dict = new Dictionary<string, object>();
try
{
var httpRequest = HttpContext.Current.Request;
foreach (string file in httpRequest.Files)
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
var postedFile = httpRequest.Files[file];
if (postedFile != null && postedFile.ContentLength > 0)
{
int MaxContentLength = 1024 * 1024 * 1; //Size = 1 MB
IList<string> AllowedFileExtensions = new List<string> { ".jpg", ".gif", ".png" };
var ext = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf('.'));
var extension = ext.ToLower();
if (!AllowedFileExtensions.Contains(extension))
{
var message = string.Format("Please Upload image of type .jpg,.gif,.png.");
dict.Add("error", message);
return Request.CreateResponse(HttpStatusCode.BadRequest, dict);
}
else if (postedFile.ContentLength > MaxContentLength)
{
var message = string.Format("Please Upload a file upto 1 mb.");
dict.Add("error", message);
return Request.CreateResponse(HttpStatusCode.BadRequest, dict);
}
else
{
var filePath = HttpContext.Current.Server.MapPath("~/Images/" + postedFile.FileName);
postedFile.SaveAs(filePath);
}
}
var message1 = string.Format("Image Updated Successfully.");
return Request.CreateErrorResponse(HttpStatusCode.Created, message1); ;
}
var res = string.Format("Please Upload a image.");
dict.Add("error", res);
return Request.CreateResponse(HttpStatusCode.NotFound, dict);
}
catch (Exception ex)
{
var res = string.Format("some Message");
dict.Add("error", res);
return Request.CreateResponse(HttpStatusCode.NotFound, dict);
}
}
}
}
public void PostPerson(Person _person, byte[] ImageFile)
{
using (var client = new HttpClient())
{
string json = JsonConvert.SerializeObject(_person);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
var result = client.PostAsync(ApiUrl + "/api/Xamarin", content).Result;
if (ImageFile != null && _person.ImageName != null)
{
UploadBitmapAsync(ImageFile, _person.ImageName);
}
}
}
public void PutPerson(Person_person, byte[] ImageFile)
{
using (var client = new HttpClient())
{
try{
string json = JsonConvert.SerializeObject(_person);
StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
var result = client.PutAsync(ApiUrl + "/api/Xamarin", content).Result;
if (ImageFile != null && _person.ImageName != null)
{
UploadBitmapAsync(ImageFile, _person.ImageName);
}
}
catch(Exception ex)
{
}
}
}
مشکل از ورودی متد هست
نمیتونید Byte در یافت کنید
مثل آموزش پیش برید و تصویر رو در متد جدا دریافت کنید
اگر سوال راجع به WebApi دارید در دوره MVC مطرح کنید این انجمن مربوط به سوالات Xamarin هست
ممنون
آقای مهندس می بخشید بنده دقیقا مثل آموزش پیش رفتم، حتی متد جدایی که برای آپلود تصویر نوشتم با همون اسم UploadBitmapAsync هست.
و نکته بعدی اینکه همون طور که عرض کردم webapi مشکل ندارد، با postman اکشن های put , delete در webapi انجام می شود و در دیتابیس ثبت می شود.
خطا روی خط var result = client.PutAsync(ApiUrl + "/api/Xamarin", content).Result; که در زامارین قراردارد و داخل متد هست، اتفاق می افتد.
بنده برای برقراری ارتباط زامارین با webapi در put , delete مشکل دارم، لطفا یک نمونه کد زامارین برای فراخوانی put , delete قرار بدهید.
در این لینک کامل توضیح داده دوست من