PDA

View Full Version : مشکل ارسال یک رشته به Web Api2



leontry89
پنج شنبه 19 مرداد 1396, 19:33 عصر
دوستان من یک web api2 دارم که در یک متد Get ساعت و زممان و رو برمیگردونه و در یک متد رشته ای به نام name رو میگیره و ذخیره میکنه در دی بی.

حالا مشکلم اینه این کد چرا خطا میده:
private void button1_Click(object sender, EventArgs e)
{
Employee ep = new Employee() { Name = "ali" };
HttpClient hc = new HttpClient();
hc.BaseAddress = new Uri("http://test.com/api/myapi");
HttpResponseMessage response = hc.PostAsync("api/myapi", ep).Result;
}

مهدی کرامتی
پنج شنبه 19 مرداد 1396, 19:42 عصر
این کد رو در چه نوع برنامه ای نوشته اید؟ آیا Windows Forms یا Web Forms است؟

leontry89
پنج شنبه 19 مرداد 1396, 19:48 عصر
ویندوز فرم

leontry89
پنج شنبه 19 مرداد 1396, 19:49 عصر
مثلا خواستم روی یک باتن کلیک شد یک رشته به api ارسال بشه

Mahmoud.Afrad
پنج شنبه 19 مرداد 1396, 23:00 عصر
چه خطایی میده؟

پارامترها رو درست مقدار ندادید.
PostAsync("api/myapi", ep , new JsonMediaTypeFormatter())
BaseAddress رو هم http://test.golnouri.com/ بزارید.

leontry89
جمعه 20 مرداد 1396, 11:35 صبح
متاسفانه string رو پست نمیکنه به API
ظاهرا آدرس دهی API درسته
مشکل فرستادنه

مهدی کرامتی
جمعه 20 مرداد 1396, 11:55 صبح
از کتابخانه RestSharp استفاده کن (می توانی از طریق Nuget به پروژه ات اضافه اش کنی). من همیشه با اون کار می کنم و مشکلی هم نداشتم.

leontry89
جمعه 20 مرداد 1396, 13:56 عصر
میشه یک رفرنس خوب معرفی کنید که ساده باشه برای Post یک مقدار

مهدی کرامتی
جمعه 20 مرداد 1396, 14:33 عصر
مثالهای خود RestSharp خیلی کامل است. من اکثرا مثالهای خودش رو کپی/پیست می کنم تو کد خودم.

RIG000
جمعه 20 مرداد 1396, 15:45 عصر
در مورد نحوه ارسال و دریافت از web Api بیشتر بخون.


using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private async void SaveBook_Click(object sender, EventArgs e)
{
//api/Book/SaveBook
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:16025/");// url
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("", "C#‎‎")
});
var result = client.PostAsync("/api/Book/SaveBook", content).Result;
string resultContent = await result.Content.ReadAsStringAsync();
MessageBox.Show(resultContent);
}
}
}
}

و متد وب سرویس


[HttpPost]
[Route("api/Book/SaveBook")]
public DateTime Save([FromBody] string BookName)
{
return DateTime.Now;
}

leontry89
جمعه 20 مرداد 1396, 19:21 عصر
در مورد نحوه ارسال و دریافت از web Api بیشتر بخون.


using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private async void SaveBook_Click(object sender, EventArgs e)
{
//api/Book/SaveBook
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:16025/");// url
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("", "C#‎‎‎")
});
var result = client.PostAsync("/api/Book/SaveBook", content).Result;
string resultContent = await result.Content.ReadAsStringAsync();
MessageBox.Show(resultContent);
}
}
}
}

و متد وب سرویس


[HttpPost]
[Route("api/Book/SaveBook")]
public DateTime Save([FromBody] string BookName)
{
return DateTime.Now;
}

دوست عزیز من این کد رو استفاده کردم فقط contentresult نال برمیگردونه
// GET: api/MyApi
public string Get()
{
System.Threading.Thread.Sleep(3000);
return DateTime.Now.ToString();
}

// GET: api/MyApi/5
public string Get(string name)
{
return "سلام "+name;
}
این کد سمت Api من هستش مشکل از اینه به نظر شما؟ یعنی میخوام یک استرینگ به Name پاس بدم

RIG000
جمعه 20 مرداد 1396, 20:01 عصر
هم کد سمت کلاینت و هم سرور رو بذار.
اگر خطایی داره رو هم بذار.
و الان من متوجه نمیشم شما مقدار بازگشتی از سمت api رو مقدار نال میگیری و یا مقداری که داری پاس میدی به api رو نال میگیره .؟
ضممنا کد ی که نوشتم کار میکنه. میتونی ازش استفاده کنی.
و همچنین
System.Threading.Thread.Sleep(3000)اینو برای چی گذاشتی؟

leontry89
جمعه 20 مرداد 1396, 20:16 عصر
این کد API هستش:
public string Get(string name)
{
return "سلام "+name;
}
با جی کوئری اجکس از یک ویو یک مقدار رو به Name پاس دادم و کاملا اکی بود. حالا می خوام تو windows application بتونم یک مقدار رو به همین نیم پاس بدم.
آدرس این api اینطوریه و رو هاست قرار داره: http://test.test.com/api/myapi

حالا توسط این کد C# میخوام یک string پاس بدم به این Name در API
کد C#:
private async void button2_Click(object sender, EventArgs e)
{

using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://test.test.com/");// url
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("vbnvbnvn", "C#‎‎‎")
});
var result = client.PostAsync("api/myapi", content).Result;
string resultContent = await result.Content.ReadAsStringAsync();
MessageBox.Show(resultContent);
}
}

اجرا میشه اما چیزی به Name پاش نمیده

RIG000
جمعه 20 مرداد 1396, 20:33 عصر
[HttpPost]
[Route("api/controllerName/ActionName")]
public string Get([FromBody] string name)
{
return "سلام " + name;
}

و این

var result = client.PostAsync("/api/Book/Get", content).Result;
رو با دقت جاگذاری کن.
در حال حضر فکر میکنم اصبا api شما call نمیشه.

این [HttpPost] و [Route("api/controllerName/ActionName")] و [FromBody] و "/api/Book/Get" رو در نظر بگیر و اعمال کن.