У меня есть следующий метод в контроллере Api
[HttpPost]
public string TestMethod()
{
var nvc = Request.Form;
return Request.HttpMethod + " | " + string.Join("&", nvc.AllKeys.Select(a => a + "=" + HttpUtility.UrlEncode(nvc[a])));
}
Когда я выполняю запрос POST из браузера, он работает правильно, но если я пытаюсь отправить POST с помощью C #, ASP возвращаетОшибка 404 Если я удалю [HttpPost]
перед методом, ASP скажет, что я пытаюсь сделать запрос GET.
string url = "https://localhost:44300/Api/TestMethod";
Dictionary<string, string> pars = new Dictionary<string, string>();
pars.Add("a", "b");
pars.Add("c", "d");
pars.Add("e", "f");
Console.WriteLine(POST(url, pars));
Я пытался манипулировать заголовками, но это было бесполезно. Вот мой метод POST
static string POST(string url, Dictionary<string, string> parameters)
{
HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(new Uri(url));
hwr.KeepAlive = false;
hwr.Method = "POST";
hwr.ContentType = "application/x-www-form-urlencoded";
hwr.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0";
byte[] data = Encoding.UTF8.GetBytes(MakeQueryString(parameters));
hwr.ContentLength = data.Length;
using (Stream reqStream = hwr.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
}
string result;
using (HttpWebResponse response = (HttpWebResponse)hwr.GetResponse())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")))
{
result = sr.ReadToEnd();
}
}
return result;
}
UPD 1: я отправляю запрос POST, используя RESTClient для Firefox;UPD 2: Мой метод C # работает для других сайтов
RESTClient screenshot