• 1396/12/14

put , delete :

سلام استاد خداقوت

لطفا نمونه یا لینک آموزش معتبر، برای put و delete اطلاعات زامارین در webapi قرار بدهید.

متشکرم

  • 1396/12/14
  • ساعت 13:02

در  بخش بعدی که post رو بگم برای put و  delete هم به همین شکل خواهد بود


  • 1396/12/17
  • ساعت 09:35

عرض سلام و خسته نباشید

برای 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 یکسری تغییرات باید اعمال بشه. انجام دادم اما درست نشد!

لطفا کمک کنید. ممنون


  • 1396/12/17
  • ساعت 09:48

خیر تغییری نیاز نیست

باید بررسی کنید ببینید خطا داره خیر

از Elmah استفاده کنید


  • 1396/12/17
  • ساعت 09:58

با elmah خطای زیر رو نشون میده.


  • 1396/12/17
  • ساعت 10:11

متن ارور کاملا گویاست

میگه مسیر رو پیدا نمیکنه


  • 1396/12/17
  • ساعت 10:38

بله مشکل بنده هم همین هست، همون مسیری که برای 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)
                {
                        }
                       }


  • 1396/12/17
  • ساعت 10:40

کد کامل api را قرار دهید


  • 1396/12/17
  • ساعت 10:43

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);
            }
        }
    }
}

 


  • 1396/12/17
  • ساعت 10:48

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)
                {
                    
                }
                
            }
        }


  • 1396/12/17
  • ساعت 11:25

مشکل از ورودی متد هست

نمیتونید Byte در یافت کنید

مثل آموزش پیش برید و تصویر رو در متد جدا دریافت کنید

 

اگر سوال راجع به WebApi دارید در دوره MVC مطرح کنید این انجمن مربوط به سوالات Xamarin هست

ممنون


  • 1396/12/17
  • ساعت 11:45

آقای مهندس می بخشید  بنده دقیقا مثل آموزش پیش رفتم، حتی متد جدایی که برای آپلود تصویر نوشتم با همون اسم UploadBitmapAsync  هست.

و نکته بعدی اینکه همون طور که عرض کردم webapi مشکل ندارد، با postman اکشن های put , delete  در webapi انجام می شود و در دیتابیس ثبت می شود.

خطا روی خط    var result = client.PutAsync(ApiUrl + "/api/Xamarin", content).Result;  که در زامارین قراردارد و داخل متد هست، اتفاق می افتد.

بنده برای برقراری ارتباط زامارین با webapi در put , delete مشکل دارم، لطفا یک نمونه کد زامارین برای فراخوانی put , delete  قرار بدهید.

 


  • 1396/12/17
  • ساعت 11:47

در این لینک کامل توضیح داده دوست من


logo-samandehi