CouchDB .... HttpWebRequest - PullRequest
       1

CouchDB .... HttpWebRequest

0 голосов
/ 28 апреля 2011

У меня проблемы с получением метода HTTP PUT, работающего с базой данных Couchdb create. Ничего страшного в коде, вы все уже видели, поэтому не будете публиковать, потому что это слишком скучно. Сообщение об ошибке при использовании метода put Соединение закрыто. Есть ли что-то, о чем я должен знать ... что-то действительно дурацкое. Я получаю 404, когда я использую метод POST, который является правильным в контексте создания новой БД с Couchdb. Любая помощь высоко ценится. Может ли HTTPWebRequest выполнить метод PUT? Если нет, то я не понимаю, почему нет.

более конкретно: ошибка: базовое соединение было закрыто: соединение было неожиданно закрыто.

Я проверил Couchdb с помощью CURL ... и он отлично работает.

В этот момент возникает ошибка ... после установки метода на "PUT"

Stream requestStream = httpWebRequest.GetRequestStream();

фрагмент кода:

private string DataViaHTTP(string url, Dictionary<string, string> parameters, string content, string contentType, int timeout, bool contentIsParam, string method)
{
    byte[] requestData;
    try
    {
        HttpWebRequest httpWebRequest;

        if (contentIsParam == false)
        {
            requestData = System.Text.Encoding.ASCII.GetBytes(content);
            httpWebRequest = (HttpWebRequest)WebRequest.Create(BuildParamString(url, parameters));
        }
        else
        {
            requestData = System.Text.Encoding.ASCII.GetBytes(BuildParamString(null, parameters));
            httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        }

        httpWebRequest.Method = method;
        httpWebRequest.ContentType = contentType;

        if (timeout > 0)
        {
            httpWebRequest.Timeout = timeout;
        }

        httpWebRequest.ContentLength = requestData.Length;
        Stream requestStream = httpWebRequest.GetRequestStream();
        requestStream.Write(requestData, 0, requestData.Length);
        requestStream.Close();

        // Read and return the response stream
        HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

        Stream outStream = httpWebResponse.GetResponseStream();


        var stringStream = String.Empty;
        using (StreamReader streamReader = new StreamReader(outStream))
        {
            stringStream = streamReader.ReadToEnd();

        }

        return stringStream;
    }
    catch (WebException e)
    {
        throw e;
    }
    catch (Exception e)
    {

        throw e;
    }
}

это тоже не сработало: (

public string PutCommand(string url)
{
    try
    {
        using (WebClient webclient = new WebClient())
        {
            webclient.Headers["User-Agent"] = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/532.5";
            webclient.Encoding = System.Text.Encoding.ASCII;
            var x = webclient.UploadData(url, "PUT", new byte[] {});
            return System.Text.Encoding.ASCII.GetString(x);
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

1 Ответ

1 голос
/ 29 апреля 2011

Я знаю, что это не решение проблемы, но есть ли какая-то причина, по которой вы не можете использовать класс System.Net.WebClient, если хотите просто получить данные из URL? Это устранит много загроможденного кода, который вы написали. Вы можете буквально использовать его с одной строкой, например:

string data = new WebClient().DownloadString(@"http://whateverURL.com/?options=1&somethingElse=5");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...