View Full Version : مشکل ارسال یک رشته به Web Api2
leontry89
پنج شنبه 19 مرداد 1396, 20: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, 20:42 عصر
این کد رو در چه نوع برنامه ای نوشته اید؟ آیا Windows Forms یا Web Forms است؟
leontry89
پنج شنبه 19 مرداد 1396, 20:48 عصر
ویندوز فرم
leontry89
پنج شنبه 19 مرداد 1396, 20:49 عصر
مثلا خواستم روی یک باتن کلیک شد یک رشته به api ارسال بشه
Mahmoud.Afrad
جمعه 20 مرداد 1396, 00:00 صبح
چه خطایی میده؟
پارامترها رو درست مقدار ندادید.
PostAsync("api/myapi", ep , new JsonMediaTypeFormatter())
BaseAddress رو هم http://test.golnouri.com/ بزارید.
leontry89
جمعه 20 مرداد 1396, 12:35 عصر
متاسفانه string رو پست نمیکنه به API
ظاهرا آدرس دهی API درسته
مشکل فرستادنه
مهدی کرامتی
جمعه 20 مرداد 1396, 12:55 عصر
از کتابخانه RestSharp استفاده کن (می توانی از طریق Nuget به پروژه ات اضافه اش کنی). من همیشه با اون کار می کنم و مشکلی هم نداشتم.
leontry89
جمعه 20 مرداد 1396, 14:56 عصر
میشه یک رفرنس خوب معرفی کنید که ساده باشه برای Post یک مقدار
مهدی کرامتی
جمعه 20 مرداد 1396, 15:33 عصر
مثالهای خود RestSharp خیلی کامل است. من اکثرا مثالهای خودش رو کپی/پیست می کنم تو کد خودم.
RIG000
جمعه 20 مرداد 1396, 16: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, 20: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, 21:01 عصر
هم کد سمت کلاینت و هم سرور رو بذار.
اگر خطایی داره رو هم بذار.
و الان من متوجه نمیشم شما مقدار بازگشتی از سمت api رو مقدار نال میگیری و یا مقداری که داری پاس میدی به api رو نال میگیره .؟
ضممنا کد ی که نوشتم کار میکنه. میتونی ازش استفاده کنی.
و همچنین
System.Threading.Thread.Sleep(3000)اینو برای چی گذاشتی؟
leontry89
جمعه 20 مرداد 1396, 21: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, 21: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" رو در نظر بگیر و اعمال کن.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.