ASP.NET POST получить вопрос - PullRequest
       8

ASP.NET POST получить вопрос

1 голос
/ 30 октября 2019

У меня есть следующий метод в контроллере 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

1 Ответ

0 голосов
/ 03 ноября 2019

Я нашел решение. Проблема была в web.config

<sessionState timeout="90" cookieless="AutoDetect" />

AutoDetect делает проблему, для ее решения необходимо удалить cookieless="AutoDetect"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...