PDA

View Full Version : کار نکردن putasync با httpclient



hamidi.sh
پنج شنبه 15 شهریور 1397, 11:05 صبح
سلام کد من چرا هیچ کاری نمی کنه حتی خطا هم نمیده

HttpResponseMessage response = null;
var httpClient = new HttpClient();

var json = JsonConvert.SerializeObject(tableSokhanrani1);

HttpContent httpContent = new StringContent(json, Encoding.UTF8, MediaTypeHeaderValue.Parse("application/json; charset=utf-8").MediaType);



//httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var requestUrl = new Uri($"http://www.aashuraian.ir/api/TableSokhanranis/"+id.Id.ToString() );

response = await httpClient.PutAsync(requestUrl, httpContent);
حتی وقتی delet را هم میزارم کار نمیکنه فقط getasync کار میکنه

ramtinak
جمعه 16 شهریور 1397, 13:29 عصر
سلام، شاید دلیلش این باشه که از متد Put یا Delete پشتیبانی نمیکنه!


>405 - HTTP verb used to access this page is not allowed.

http://s8.picofile.com/file/8336589700/pman.PNG

hamidi.sh
شنبه 17 شهریور 1397, 14:26 عصر
من این خط را به web.config اضافه کردم
<modules>
<remove name="WebDAVModule" />
</modules>

<handlers>
<remove name="WebDAV" />
الان delet کار می کنه اما put نه

ramtinak
شنبه 17 شهریور 1397, 15:02 عصر
چیزی که اضافه کردید رو پاک کنید و این ها رو به تگ system.webServer اضافه کنید:

حقیقتا ویرایشگر سایت، متنی که گذاشتم رو خراب کرد، براتون داخل فایل ضمیمه یه فایل تکست ساختم.

موفق باشید.

hamidi.sh
شنبه 17 شهریور 1397, 15:42 عصر
سلام تشکر .
باز هم نشد برای httpcontent از این کد استفاده کردم درسته؟ شاید مشکل اینجا باشه
var tableSokhanrani1 = new TableSokhanrani
{
TableSokhBazdid = baz
{

ramtinak
شنبه 17 شهریور 1397, 16:02 عصر
دوست عزیز کدهای مربوط به قسمت HttpPut که در web api نوشتید رو کامل اینجا بنویسید تا بتونیم کمکتون کنیم

hamidi.sh
شنبه 17 شهریور 1397, 16:28 عصر
private async void FlowListView_FlowItemTapped(object sender, ItemTappedEventArgs e)
{

Models.TableSokhanrani id = (Models.TableSokhanrani)e.Item;


baz = id.TableSokhBazdid + 1;



var tableSokhanrani1 = new TableSokhanrani
{
TableSokhBazdid = baz ,

};


HttpClient httpClient = new HttpClient();

var json = JsonConvert.SerializeObject(tableSokhanrani1);

HttpContent httpContent = new StringContent(json, Encoding.UTF8, MediaTypeHeaderValue.Parse("application/json; charset=utf-8").MediaType);

var requestUrl = new Uri($"http://www.aashuraian.ir/api/TableSokhanranis/{id.Id}" );


HttpResponseMessage response = await httpClient.PutAsync(requestUrl,httpContent);
response.EnsureSuccessStatusCode();
{

ramtinak
شنبه 17 شهریور 1397, 17:14 عصر
دوست عزیز منظورم کدهای درون سایتتون بود:

http://www.aashuraian.ir/api/TableSokhanranis
کدهای کنترلر بالا!

hamidi.sh
یک شنبه 18 شهریور 1397, 09:54 صبح
بله
148827

ramtinak
دوشنبه 19 شهریور 1397, 12:43 عصر
خب اینطور که من فهمیدم، HttpPut داخل web api خیلی اذیت میکنه، برای همین جواب ها رو به چند قسمت تقسیم میکنم:


1. افزودن Route به فایل WebApiConfig
بعد از روت اصلی، این کد رو بنویسید:
config.Routes.MapHttpRoute(
name: "TableSokhanranis",
routeTemplate: "api/TableSokhanranis/{id}",
defaults: new { controller = "TableSokhanranis", action = "Get" }
);


2. اگه با روش یک جواب نگرفتید، بدون اینکه پاکش کنید، این کار رو انجام بدید:
[FromRoute] و [FromBody] رو از ورودی تابع PutTableSokhanrani حذف کنید( یعنی فقط int id و TableSokhanrani tableSokhanrani رو باقی بگذارید)


3. جای {id} درون [HttpPut("{id}")]، بنویسید {id:int} :
[HttpPut("{id:int}")]


4. جای [HttpPut("{id}")] این رو بنویسید:
[Route("{id:int}"), HttpPut]


5. نام تابع( PutTableSokhanrani) رو به Put تغییر بدید و اون قسمت HttpPut بالاش رو حذف کنید و بجاش این رو بنویسید:
[Route("{id:int}")]




نکته: از قسمت دو به بعد، [FromRoute] و [FromBody] رو استفاده نکنید!


موفق باشید.

hamidi.sh
سه شنبه 20 شهریور 1397, 09:35 صبح
درست شد اما داده ها رو پاک می کنه

hamidi.sh
سه شنبه 20 شهریور 1397, 11:46 صبح
webapiconfig نمیدونم کجاست. همچین چیزی ندارم.

hamidi.sh
سه شنبه 20 شهریور 1397, 12:32 عصر
شماره ,4 , 5کار کرد اما داده ها رو از جدول پاک میکنه