Почему я не могу просто отправить остальные вызовы в MVC3?

Я пытаюсь отправить запросы в свое приложение MVC3, я пробовал обычный WebRequest, я пытаюсь использовать RestSharp, применяя правильный аутентификатор, но он все равно возвращает результат перенаправления страницы входа?

Что я делаю неправильно?

upd: Как мне выполнить аутентификацию форм с помощью RestSharp? Я думаю, это как-то возможно - просто нужно поиграть с этим печеньем...


person iLemming    schedule 23.10.2012    source источник
comment
Если вы перенаправляетесь на страницу входа в систему, ваше приложение mvc 3 должно быть настроено для проверки подлинности с помощью форм. Проверка подлинности с помощью форм требует, чтобы файл cookie был отправлен вместе с запросом. Поддерживает ли используемый вами аутентификатор? Какой аутентификатор вы используете?   -  person Kevin Junghans    schedule 23.10.2012
comment
Я использовал Basic, теперь я думаю, что это не сработает... Но в Restsharp нет проверки подлинности с помощью форм, не так ли?   -  person iLemming    schedule 23.10.2012


Ответы (2)


Если вы перенаправляетесь на страницу входа в систему, ваше приложение mvc 3 должно быть настроено для проверки подлинности с помощью форм. Проверка подлинности с помощью форм требует, чтобы файл cookie был отправлен вместе с запросом. Если вы используете базовый аутентификатор в RestSharp, это не сработает. Я предполагаю, что вы используете контроллер MVC для предоставления REST API, который вы пытаетесь вызвать.

Один из вариантов — перейти на MVC 4 и использовать веб-API ASP.NET для разработки REST API. Поведение авторизации в веб-API ASP.NET немного отличается тем, что вместо перенаправления возвращается ошибка HTTP 401. И вы можете настроить AuthorizationAttribute, чтобы извлекать информацию из заголовка HTTP для базовой проверки подлинности и авторизации.

Другой вариант — если действие на контроллере не требует аутентификации/авторизации, вы можете поместить в метод AllowAnonymousAttribute.

person Kevin Junghans    schedule 23.10.2012

Чтобы пройти аутентификацию с помощью форм, вы должны получить файл cookie и прикрепить его к контейнеру файлов cookie RestSharp. Чтобы получить cookie, вы можете использовать обычный WebRequest.

    private Cookie GetAuthCookie(string user, string pass)
    {
        var http = WebRequest.Create(_baseUrl+"Users/Login") as HttpWebRequest;
        http.AllowAutoRedirect = false;
        http.Method = "POST";
        http.ContentType = "application/x-www-form-urlencoded";
        http.CookieContainer = new CookieContainer();
        var postData = "UserName=" + user + "&Password=" + pass + "&RememberMe=true&RememberMe=false&ReturnUrl=www.google.com";
        byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(postData);
        http.ContentLength = dataBytes.Length;
        using (var postStream = http.GetRequestStream())
        {
            postStream.Write(dataBytes, 0, dataBytes.Length);
        }
        var httpResponse = http.GetResponse() as HttpWebResponse;
        return httpResponse.Cookies[FormsAuthentication.FormsCookieName];
    }
person iLemming    schedule 24.10.2012